首页新闻找找看学习计划

Code First中往数据库中插入数据为什么会把导航属性的数据也添加到相应的表中?

0
悬赏园豆:20 [待解决问题]

比如:User表和Tag表是一对多的关系,为什么添加Tag数据的时候(DbContext.Set<Tag>.Add(tag)),Tag的导航属性User也会往数据库User表中添加数据呢?

Sammo的主页 Sammo | 初学一级 | 园豆:184
提问于:2016-08-28 21:36
< >
分享
所有回答(2)
0

你引用了.他就追踪了.他追踪了就添加了.

想不添加就别加导航属性.或者导航属性里的实体得要是从ef里读出来的已被追踪的实体.就不会了

吴瑞祥 | 园豆:28770 (高人七级) | 2016-08-29 00:19

谢谢,如果不引用导航属性的话,怎么跟User表建立联系呢?

支持(0) 反对(0) Sammo | 园豆:184 (初学一级) | 2016-08-29 00:21

@Sammo: 查的时候join.插的时候赋值就好了.

.你的TAG里的用户实体是怎么来的才是问题.

支持(0) 反对(0) 吴瑞祥 | 园豆:28770 (高人七级) | 2016-08-29 00:23

@吴瑞祥: 用户实体是通过登录用户名查询出来的,至于插入的Tag,确实是赋值的啊,只不过有个User的导航属性,然后就让User = CurrentUser赋值进去,他的错误应该是我的User实体也插入了User表里,但是User表里已经有当前登录用户了,所以就报错了

支持(0) 反对(0) Sammo | 园豆:184 (初学一级) | 2016-08-29 00:27

@Sammo: 那你这个CurrentUser是哪里来的.如果想正常的话.得要从ef里重新读一次这个user.再赋值.

总结就是弄清楚EF追踪是个什么东西就行了.他判断是否需要插入是判断他的追踪状态的.你这样直接添加一个未追踪的实体.他会认为是新插入的东西.如果你赋值一个已追踪的他就不会管了

支持(0) 反对(0) 吴瑞祥 | 园豆:28770 (高人七级) | 2016-08-29 01:05

@吴瑞祥: CurrentUser就是指当前登录用户,也是根据登录名重新获取的User,现在的意思是不是赋值一个已追踪的实体就可以了?

支持(0) 反对(0) Sammo | 园豆:184 (初学一级) | 2016-08-29 19:49

@Sammo: 是的

支持(0) 反对(0) 吴瑞祥 | 园豆:28770 (高人七级) | 2016-08-29 20:21

@吴瑞祥: AsNoTracking是不追踪是吧,那默认就是进行追踪咯?

支持(0) 反对(0) Sammo | 园豆:184 (初学一级) | 2016-08-29 20:33

@Sammo: 你在保存前赋值后检查下user的实体追踪状态吧.

支持(0) 反对(0) 吴瑞祥 | 园豆:28770 (高人七级) | 2016-08-29 21:41

@吴瑞祥: OK,哪个属性可以确定它是否被追踪?谢谢了

支持(0) 反对(0) Sammo | 园豆:184 (初学一级) | 2016-08-29 21:43
0
EF真的得时刻留神才能用好!
我叫So | 园豆:181 (初学一级) | 2016-08-29 00:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册