首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架4引用现有对象添加实体

实体框架4引用现有对象添加实体
EN

Stack Overflow用户
提问于 2013-12-11 10:09:02
回答 3查看 1.2K关注 0票数 2

当通过导航器将新实体添加到已经存在的实体时,我遇到了实体框架4的问题。请看一下代码:

代码语言:javascript
运行
复制
            ControlPolicy cp1 = new ControlPolicy()
            {
                ControlPolicyLevelType = 2, //full access to NA
                MemberState = context.Countries.First(tt => tt.IsMemberState),
                OperaModuleType = 2,
                MemberStateIncluded = true,
                CreateDate = DateTime.Now,
                CreatedByUserId = 1,
            };
            context.ControlPolicies.AddObject(cp1);

            context.SaveChanges();

错误是:

来自“ControlPolicy_MemberState_Country_”AssociationSet的关系处于“添加”状态。考虑到多重限制,相应的“国家”也必须处于“附加”状态。

当我查看ChangeTracker时,ControlPolicy对象实际上处于“添加”状态,而国家对象处于“未定义”状态。我认为这是正确的--毕竟我没有增加一个新的目标,我只想提到现有的国家。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-11 16:53:17

在这种情况下,错误的EF模型是错误的。MemberState与国家是1-1的关系,因此对于EF,很明显,当ControlPolicy被添加时,还必须定义一个新的MemberState ( Country )。一旦导航器关系被更改为适当的m:1,MemberState:Country,一切都开始工作了。

另外,我觉得瑞雅林巴FK的建议很好。尽管这不是这里的问题,也不适用于我的情况,因为使用了ChangeTracker。显然,ChangeTracker不会知道通过FK所做的改变。然而,在任何其他情况下,使用外键都是非常方便和有用的。

票数 0
EN

Stack Overflow用户

发布于 2013-12-11 10:33:54

我认为问题在于MemberState = context.Countries.First(tt => tt.IsMemberState) statement.Few statement.Few中的Linq查询与Find语句中发生的相同错误。通过Google,我找到了适合我的解决方案。

代码语言:javascript
运行
复制
 var zz= context.ControlPolicy.Create().GetType().GetProperty("MemberState").GetValue(cp1);

 context.Entry(dmm.Set<ControlPolicy>().Find(entityKey)).CurrentValues.SetValues(cp1);
 context.SaveChanges();
票数 0
EN

Stack Overflow用户

发布于 2013-12-11 11:07:20

我认为这将解决你的问题,我可能有错误的想法,但从错误信息,我会尝试如下:-

代码语言:javascript
运行
复制
var country = context.Countries.First();

ControlPolicy cp1 = new ControlPolicy()
            {
                Country = country,
                ControlPolicyLevelType = 2, 
                MemberState = country.IsMemberState,
                OperaModuleType = 2,
                MemberStateIncluded = true,
                CreateDate = DateTime.Now,
                CreatedByUserId = 1,
            };
            context.ControlPolicies.AddObject(cp1);

            context.SaveChanges();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20516212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档