如何将作为子集合一部分的实体的EntityState更改为分离实体

时间:2014-01-27 15:03:56

标签: c# entity-framework wcf-ria-services

我有一个新的父实体,它有Lanugages作为导航属性。在父实体属于domaincontext之前,我Add现有的语言,它将它的实体状态设置为Added。语言实体已存在于数据库中,但由于我必须在有上下文之前将其添加到父实体,因此我没有机会Attach语言实体而不是添加它。

如何在对domaincontext调用EntityState之前更改语言条目的SaveChanges(),或以其他方式解决此问题?

2 个答案:

答案 0 :(得分:0)

您可以通过上下文ObjectStateManager更改EntityState,如下所示:

this.ObjectContext.ObjectStateManager.ChangeObjectState(myEntity, EntityState.Added);

其中EntityState枚举为here ...

答案 1 :(得分:0)

从你在不同答案中的评论中,你提到语言实体本质上是常量。这是否意味着主键值不会改变并为您所知?如果是这样,这可能会有效:

Public Class MyParent
    Public Property Language as Language  '<--- navigation property
    Public Property LanguageID as Integer '<--- primary key foreign key
End Class

Dim context as New MyContext
Dim p as New MyParent
p.LanguageID = 42      '<--- you language "constant" primary key value
context.MyParents.Add(p)
context.SubmitChanges(...)