我首先按照此处规定的方法使用 EF 代码建立了一对一的关系:
我的映射看起来像这样......
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Asset>()
.HasRequired(i => i.NewsItem)
.WithOptional(e => e.Asset)
.Map(m => m.MapKey("NewsItemId"));
}
但是当我得到这个异常时......
来自“Asset_NewsItem”AssociationSet 的关系处于“已删除”状态。给定多重约束,相应的“Asset_NewsItem_Source”也必须处于“已删除”状态。
每当此代码运行时:
var entry = _db.NewsItems.Find(id);
entry.Asset = new Asset();
_db.DbContext.SaveChanges();
如果我明确地将与 NewsItem 关联的先前资产标记为删除,我可以让事情正常工作,但它似乎有点不稳定。看起来,基于映射,上面的代码应该可以简单地工作......用新的资产替换旧的资产。
难道我做错了什么?我需要在映射中指定什么东西才能让事情正常工作吗?或者,它只是必须删除然后添加这样的关联对象的 EF 方式吗?