首页 新闻 会员 周边

如何禁用EF实体的关联更新????

0
悬赏园豆:5 [已关闭问题] 关闭于 2015-07-31 09:41

如何禁用EF实体的关联更新????

比如:实体A里面有一个导航属性实体B,默认情况在对实体A进行CRUD时,都会关联实体B进行同样的CRUD,导致容易出现问题,需要取消这种关联更新,不知道园子里的高手能否帮小弟解答一下,非常感谢!

问题补充:

例子:

        static void Main(string[] args)
        {
            Model1Container context = new Model1Container();

            //第一种情况:EntityOne有导航属性EntityTwo ,新增时必需同时指定新增的EntityTwo ,否则报错:“Model1Container.EntityOnes”中的实体参与“EntityOneEntityTwo”关系。找到 0 个相关的“EntityTwo”。应有 1 个“EntityTwo”。
            var objSetOne = context.EntityOnes;
            objSetOne.MergeOption = MergeOption.NoTracking;
            objSetOne.AddObject(new EntityOne() { ID = 2, P1 = "pp1", P2 = "pp2", P3 = "pp3", EntityTwo = new EntityTwo() { T1 = "tt1", T2 = "tt2", T3 = "tt3" } });
            context.SaveChanges();

            
           //第二种情况:有些时候,我们的EntityTwo可能需要先创建,但这样执行同样报错:“Model1Container.EntityTwos”中的实体参与“EntityOneEntityTwo”关系。找到 0 个相关的“EntityOne”。应有 1 个“EntityOne”。
            var objSetTwo = context.EntityTwos;
            objSetTwo.MergeOption = MergeOption.NoTracking;
            objSetTwo.AddObject(new EntityTwo() { ID = 2, T1 = "tt1", T2 = "tt2", T3 = "tt3" });
            context.SaveChanges();

           //第三种情况:有些时候,我们的EntityTwo可能已经在之前已经创建了,此处只是查询出来,用来在需要新增EntityOne时赋值给关联属性:EntityTwo,但依旧报错:“EntityOneEntityTwo”AssociationSet 中的关系处于“Deleted”状态。如果有多重性约束,则相应的“EntityOne”也必须处于“Deleted”状态。
            var entityTwo = objSetTwo.Single(t=>t.ID==2);

            var objSetOne = context.EntityOnes;
            objSetOne.MergeOption = MergeOption.NoTracking;
            objSetOne.AddObject(new EntityOne() { ID = 3, P1 = "pp1", P2 = "pp2", P3 = "pp3", EntityTwo = entityTwo });
            context.SaveChanges();



        }
梦在旅途的主页 梦在旅途 | 初学一级 | 园豆:10
提问于:2015-07-16 10:03
< >
分享
所有回答(1)
0

对于Delete,在配置映射关系时,加上 .WillCascadeOnDelete(flase) 。

对Update,你不修改实体B的属性值,就不会进行更新。

dudu | 园豆:30994 (高人七级) | 2015-07-16 10:10

导航属性不能单独更新吗?非要关联进行CRUD吗?这个问题困扰我好久,还望指点一下,谢谢!

支持(0) 反对(0) 梦在旅途 | 园豆:10 (初学一级) | 2015-07-17 16:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册