导致异常的1对1关系:AssociationSet处于“已删除”状态。给定多重约束

时间:2012-07-17 04:42:27

标签: c# entity-framework entity-framework-4 one-to-one entity-framework-4.3

我首先按照此处规定的方法使用EF代码设置一对一的关系:

Unidirectional One-To-One relationship in Entity Framework

我的映射看起来像这样......

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Asset>()
        .HasRequired(i => i.NewsItem)
        .WithOptional(e => e.Asset)
        .Map(m => m.MapKey("NewsItemId"));
}

但是当我得到这个例外......

  

来自&#39; Asset_NewsItem&#39;的关系AssociationSet位于&#39;已删除&#39;州。给定多重约束,相应的“Asset_NewsItem_Source”#39;还必须在“删除”中删除。状态。

每当此代码运行时:

var entry = _db.NewsItems.Find(id);

entry.Asset = new Asset();

_db.DbContext.SaveChanges();

如果我明确标记与NewsItem相关联的先前资产以进行删除,我可以开始工作,但它看起来有点不稳定。看起来,基于映射,上面的代码应该简单地工作......用新的资产替换旧的资产。

我做错了吗?我需要在映射中指定一些能让事情正常运行的东西吗?或者,它只是EF方式必须删除然后添加这样的关联对象?

1 个答案:

答案 0 :(得分:8)

这是EF的工作方式。您已加载包含相关资产的条目,并且知道您要分配新资产。此操作会使您的旧资产与任何条目无关,但您的映射不允许(您指定Asset必须具有相关Entry)。因此,在分配新资产以满足映射约束之前,您必须删除旧资产或将其分配给另一个条目。