我正在开展一个学校项目,我遇到了一个让我难过的错误。我正在使用实体框架,存储库模式和对象数据源。当我尝试使用产品ID外键(这是一个urlparameter)插入productvariant时,我发生了错误。
错误
ObjectDataSource'ProductVariantObjectDataSource'找不到带有'FV_ProductVariant'类型参数的非泛型方法'InsertProductVariantByProductId'。
链接到图片
http://i.stack.imgur.com/fJeR1.png
堆栈追踪:
[InvalidOperationException:ObjectDataSource'ProductVariantObjectDataSource'找不到带有'FV_ProductVariant'类型参数的非泛型方法'InsertProductVariantByProductId'。 System.Web.UI.WebControls.ObjectDataSourceView.GetResolvedMethodData(Type type,String methodName,Type dataObjectType,Object oldDataObject,Object newDataObject,DataSourceOperation operation)+1355789 System.Web.UI.WebControls.ObjectDataSourceView.ExecuteInsert(IDictionary values)+339 System.Web.UI.DataSourceView.Insert(IDictionary values,DataSourceViewOperationCallback callback)+89 System.Web.UI.WebControls.DetailsView.HandleInsert(String commandArg,Boolean causeValidation)+379 System.Web.UI.WebControls.DetailsView.HandleEvent(EventArgs e,Boolean causeValidation,String validationGroup)+574 System.Web.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(Object source,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)+169 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.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+5563
aspx页面中的对象数据源
<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>
使用
插入ObjectDataSource的ProductBL public void InsertProductVariantByProductId(FV_ProductVariant productVariant, int productId)
{
try
{
productRepository.InsertProductVariantByProductId(productVariant, productId);
}
catch (Exception ex)
{
throw ex;
}
}
IRepository
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 :(得分:0)
Creating an ObjectDataSource Control Source Object
如果
ObjectDataSource
控件的源对象公开可以调用以检索和修改数据的公共静态方法(在Visual Basic中为Shared),ObjectDataSource
控件将直接调用这些方法。如果ObjectDataSource
控件必须创建源对象的实例以进行方法调用,则该对象必须包含不带参数的公共构造函数。ObjectDataSource
控件在创建源对象的新实例时将调用此构造函数。如果源对象不包含 没有的公共构造函数 参数,您可以创建一个实例 将使用的源对象 通过
ObjectDataSource
控件ObjectCreating
事件......
另外,尝试制作方法static
。
public static void InsertProductVariantByProductId(FV_ProductVariant productVariant, int productId)
{
try
{
productRepository.InsertProductVariantByProductId(productVariant, productId);
}
catch (Exception ex)
{
throw ex;
}
}