无法在实体框架中插入

时间:2011-10-15 23:38:03

标签: entity-framework entity-framework-4

在此处需要有关插入代码的帮助。我收到一个错误

  

“对象引用未设置为对象的实例”。

我是Entity Framework的新手。希望你们能帮助我。

这是代码:

protected void SaveButton_Click(object sender, EventArgs e)
{
    var context = new MHC_CoopEntities();

    InventList product = new InventList
                       {
                           InventCategory = { CategoryID = 2 },
                           ItemName = "Del Monte Fit & Right Pineapple 330ml",
                           UnitQty = 48,
                           UnitPrice = (decimal) 20.85
                       };

    context.AddToInventLists(product);
    context.SaveChanges();
}
  

堆栈追踪:
  在Coop_WebApp._Default.SaveButton_Click(对象   发件人,EventArgs e)在E:\ Others \ Wabby ko \ Entity Framework中   4.0 \ EF_Soln \ Coop_WebApp \ Default.aspx.cs:第37行   在System.Web.UI.WebControls.Button.OnClick(EventArgs e)
  在System.Web.UI.WebControls.Button.RaisePostBackEvent(String   eventArgument)
  在System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String   eventArgument)
  在System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler   sourceControl,String eventArgument)
  在System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
  在System.Web.UI.Page.ProcessRequestMain(布尔值   includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)

2 个答案:

答案 0 :(得分:1)

我假设product.InventCategory是一个类型为Category的属性。执行InventCategory = { CategoryID = 2 }时,它只会设置CategoryID属性。但是,它需要这个对象。这就是为什么你从上下文中获取Category对象并使用它来设置InventCategory属性。希望这是有道理的。

答案 1 :(得分:0)

您必须使用给定的Category创建CategoryID实例,然后将其附加到上下文。附加是必要的,否则EF将在数据库中创建一个新的Category对象,而不是仅将关联设置为现有类别2.您还应确保正确处置创建的上下文以释放数据库连接 - 例如将代码包装到using块中:

protected void SaveButton_Click(object sender, EventArgs e)
{
    using (var context = new MHC_CoopEntities())
    {
        var category = new Category { CategoryID = 2 };
        context.Categories.Attach(category);

        InventList product = new InventList
                   {
                       InventCategory = category,
                       ItemName = "Del Monte Fit & Right Pineapple 330ml",
                       UnitQty = 48,
                       UnitPrice = (decimal) 20.85
                   };

        context.AddToInventLists(product);
        context.SaveChanges();
    } // <- context gets disposed here at the end of the using block
}