Невозможно вставить в Entity Framework

#entity-framework #entity-framework-4

#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 amp; Right Pineapple 330ml",
                           UnitQty = 48,
                           UnitPrice = (decimal) 20.85
                       };

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

Трассировка стека:
в Coop_WebApp._Default.SaveButton_Click(
отправитель объекта, EventArgs e) в E:OthersWabby koСтруктура сущности
4.0EF_Soln Coop_WebAppDefault.aspx.cs:строка 37
в System.Web.UI.WebControls.Кнопка.OnClick(EventArgs e)
в System.Web.UI.WebControls.Кнопка.RaisePostBackEvent(строка
eventArgument)
в System.Web.UI.WebControls.Кнопка.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(строка
eventArgument)
в System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
SourceControl, строка eventArgument)
в System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
в System.Web.UI.Page.ProcessRequestMain(логические
includeStagesBeforeAsyncPoint, логические includeStagesAfterAsyncPoint)

Комментарии:

1. Можете ли вы опубликовать полное сообщение об исключении трассировку стека?

2. теперь вопрос обновлен.

3. Можете ли вы попробовать установить product. CategoryID = 2; ?

4. да! это внешний ключ из таблицы категорий.

5. Попробуйте это. Получите объект модели категории и установите его в InventCategory.

Ответ №1:

Я предполагаю, что продукт.InventCategory — это свойство с типом категории. Когда вы это делаете InventCategory = { CategoryID = 2 } , он устанавливает только CategoryID атрибут. Однако для этого нужен объект. Вот почему вы получаете объект Category из контекста и используете его для установки InventCategory свойства. Надеюсь, это имеет смысл.

Ответ №2:

Вы должны создать 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 amp; 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
}