我有HomeMadeItems,它包含对Location对象的引用。因此当实体框架代码首次迁移时创建了我的db,外键。呜呜。以下是保存项目的代码:
public int SaveHomeMadeItem(HomeMadeItem mod)
{
var _loc = this.GetLocation(mod.Location.Id);
using (var s = new InventoryEntityFramework())
{
s.Locations.Attach(_loc);
mod.Location = _loc;
// returns the PK integer
if (mod.Id == 0) // new record
{
s.InventoryItems.Add(mod);
s.SaveChanges();
return mod.Id;
}
else
{
// TODO: figure out why I cannot change location
s.InventoryItems.Attach(mod);
s.Entry(mod).State = EntityState.Modified;
s.Entry(mod.Location).State = EntityState.Modified;
s.SaveChanges();
return mod.Id;
}
}
}
这是从一个控制器调用的,该控制器从一个视图中调用,该视图的位置来自下拉列表并且只给出一个id,而不是实际的位置对象。所以我得到正确的位置对象并将其附加到上下文,并将其提供给我的模型。您可以在if语句之前看到它根据项目PK的存在来决定添加或编辑。
添加代码效果很好。但是,如果我尝试编辑项目,其他属性将正确保存,但不会保存项目位置的外键。
我在其他地方看过这个问题,但没有回答。希望能找到一些帮助。
由于