#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
}