Невозможно вставить в Entity Framework - PullRequest
0 голосов
/ 16 октября 2011

Нужна помощь в моем коде вставки здесь.Я получаю сообщение об ошибке,

«Ссылка на объект не установлена ​​для экземпляра объекта».

Я совершенно новичок в 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.RaisePostBackingventeventArgument)
в System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData)
в System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint21

*1020*

Ответы [ 2 ]

1 голос
/ 16 октября 2011

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

0 голосов
/ 16 октября 2011

Вы должны создать экземпляр 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...