我有一个实体对象Item
:
public partial class Item : Entity
{
public int ItemId { get; set; }
....
public virtual IList<ItemStandard> Standards { get; set; }
}
我有ItemStandard
,Itemstandard
可以属于许多Item
,而Item
可以有很多ItemStandard
public partial class ItemStandard : Entity
{
public int ItemStandardId { get; set; }
....
public virtual IList<Item> Items { get; set; }
public ItemStandardGroup ItemStandardGroup { get; set; }
}
我遗漏了这些物品的微不足道的部分。这是我的映射:
public class ItemMapping : EntityTypeConfiguration<Item>
{
public ItemMapping()
{
HasMany(t => t.Standards)
.WithMany(t => t.Items)
.Map(m =>
{
m.ToTable("ItemStandardRelationShip");
m.MapLeftKey("ItemId");
m.MapRightKey("ItemStandardId");
});
}
}
当我从上下文中检索对象时,如果工作正常 - 如果我这样做
context.Item.FirstOrDefault(x => x.ItemId == whatever);
它将返回属性标准中的所有ItemStandard
,就像它想象的那样。
现在,我尝试做这样的更新:
public Item SaveItem(Item item, int[] Standards)
{
foreach (var a in Standards)
{
var newStandard = _context.ItemStandard.FirstOrDefault(x => x.ItemStandardId == a);
item.Standards.Add(newStandard);
}
_context.Item.Attach(item);
_context.Entry(item).State = EntityState.Modified;
_context.SaveChanges();
return _context.Item.FirstOrDefault(x => x.ItemId == item.ItemId);
}
您可以看到如何而不是返回我保存的对象,而不是从数据库中调用另一个SELECT
以确保保存发生。当我在调试器中停止它时,我看到一切正常。新的ItemStandard
附加到项目,如果我进入每个ItemStandard
,现在新项目的新Item
属性。
之后我进入数据库时,我的ItemStandardRelationShip表中没有任何更改。就好比什么都没发生过。上下文设置得很好,每个存储库中的其他所有内容都能正常工作。谁知道我做错了什么?
答案 0 :(得分:0)
foreach (var a in Standards)
{
var newStandard = _context.ItemStandard.FirstOrDefault(x => x.ItemStandardId == a);
newStandard.Items.Add(item);
item.Standards.Add(newStandard);
}