2011-03-22 2 views
1

나는 학교 프로젝트에서 일하고 있는데 저를 곤란하게 만든 오류가 있습니다. 엔티티 프레임 워크, 저장소 패턴 및 객체 데이터 소스를 사용하고 있습니다. 제품 ID 외래 키 (url 매개 변수)를 사용하여 productvariant를 삽입하려고하면 오류가 발생합니다.ObjectDataSource 통해 개체 전달 Asp.net 오류

오류

ObjectDataSource를 'ProductVariantObjectDataSource'유형 'FV_ProductVariant'의 매개 변수를 비 일반적인 방법 'InsertProductVariantByProductId'를 찾을 수 없습니다. 이미지

링크

http://i.stack.imgur.com/fJeR1.png

스택 추적 :

[InvalidOperationException이 : ObjectDataSource를 'ProductVariantObjectDataSource은'유형의 매개 변수를 비 일반적인 방법 'InsertProductVariantByProductId'을 찾을 수 없습니다 'FV_ProductVariant'.] System.Web.UI.WebControls.ObjectDataSourceView.GetResolvedMethodData (유형 유형, 문자열 methodName, 유형 +1355789 System.Web.UI.WebControls.ObjectDataSourceView.ExecuteInsert (IDictionary 값) +339 System.Web.UI.DataSourceView.Insert (IDictionary 값, DataSourceViewOperationCallback 콜백) +89 +379 System.Web.UI.WebControls.DetailsView.HandleEvent (부울 causeValidation, 문자열 유효성 검사 그룹) UI.WebControls.DetailsView.OnBubbleEvent (Object source, EventArgs e) +95 System.Web.UI.Control.RaiseBubbleEvent (Object source, EventArgs args) +37 System.Web.UI.WebControls.DetailsViewRow.OnBubbleEvent (개체 소스 , EventArgs e) +112 System.Web.UI.Control.RaiseBubbleEvent (Object source, EventArgs args) +37 System.Web.UI.WebControls.LinkButton.OnCommand (CommandEventArgs e) +125 System.Web.UI.WebControls.LinkButton.RaisePostBackEvent String eventArgument)System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (String eventArgument) +9 System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData) +176 System.Web.UI.Page.ObjectDataSource를가 IRepository

public void InsertProductVariantByProductId(FV_ProductVariant productVariant, int productId) 
{ 
    try 
    { 
     productRepository.InsertProductVariantByProductId(productVariant, productId); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 

으로 삽입된다 ProcessRequestMain (부울 includeStagesBeforeAsyncPoint 부울 includeStagesAfterAsyncPoint) 영문 페이지

<asp:ObjectDataSource ID="ProductVariantObjectDataSource" runat="server" 
    DataObjectTypeName="FV_ProductVariant" InsertMethod="InsertProductVariantByProductId" 
    SelectMethod="GetProductVariantByProductId" TypeName="ProductBL"> 
    <InsertParameters> 
     <asp:Parameter Name="productVariant" Type="Object" /> 
     <asp:QueryStringParameter Name="productId" QueryStringField="ProductId" 
      Type="Int32" /> 
    </InsertParameters> 
    <SelectParameters> 
     <asp:QueryStringParameter Name="productId" QueryStringField="ProductId" 
      Type="Int32" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

ProductBL 내의 5,563

오브젝트 소스

,
void InsertProductVariantByProductId(FV_ProductVariant productVariant, int ProductId); 

실제 저장소

public void InsertProductVariantByProductId(FV_ProductVariant productVariant, int productId) 
{ 
    try 
    { 
     productVariant.ProductVariantId = GenerateProductVariantID(); 
     productVariant.ProductId = productId; 
     context.FV_ProductVariant.AddObject(productVariant); 
     context.SaveChanges(); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 

답변

0

Creating an ObjectDataSource Control Source Object

ObjectDataSource 제어 소스 객체 검색 호출 할 수있다 (Visual Basic의 경우 Shared) 공용 정적 메소드를 노출한다면 데이터를 수정하면 ObjectDataSource 컨트롤에서 해당 메서드를 직접 호출합니다. ObjectDataSource 컨트롤이 메서드 호출을 만들기 위해 소스 개체의 인스턴스를 만들어야하는 경우 개체에는 매개 변수를 사용하지 않는 공용 생성자가 포함되어야합니다. ObjectDataSource 컨트롤은 소스 개체의 새 인스턴스를 만들 때이 생성자를 호출합니다. 소스 객체가 매개 변수없이 public 생성자를 포함하지 않는 경우, 당신은 인스턴스 ObjectCreating 이벤트에 ObjectDataSource 컨트롤 사용됩니다 소스 객체의 를 만들 수 있습니다

...

또한 방법을 시도하십시오 static.

public static void InsertProductVariantByProductId(FV_ProductVariant productVariant, int productId) 
{ 
    try 
    { 
     productRepository.InsertProductVariantByProductId(productVariant, productId); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 
관련 문제