比如:User表和Tag表是一对多的关系,为什么添加Tag数据的时候(DbContext.Set<Tag>.Add(tag)),Tag的导航属性User也会往数据库User表中添加数据呢?
你引用了.他就追踪了.他追踪了就添加了.
想不添加就别加导航属性.或者导航属性里的实体得要是从ef里读出来的已被追踪的实体.就不会了
谢谢,如果不引用导航属性的话,怎么跟User表建立联系呢?
@Sammo: 查的时候join.插的时候赋值就好了.
.你的TAG里的用户实体是怎么来的才是问题.
@吴瑞祥: 用户实体是通过登录用户名查询出来的,至于插入的Tag,确实是赋值的啊,只不过有个User的导航属性,然后就让User = CurrentUser赋值进去,他的错误应该是我的User实体也插入了User表里,但是User表里已经有当前登录用户了,所以就报错了
@Sammo: 那你这个CurrentUser是哪里来的.如果想正常的话.得要从ef里重新读一次这个user.再赋值.
总结就是弄清楚EF追踪是个什么东西就行了.他判断是否需要插入是判断他的追踪状态的.你这样直接添加一个未追踪的实体.他会认为是新插入的东西.如果你赋值一个已追踪的他就不会管了
@吴瑞祥: CurrentUser就是指当前登录用户,也是根据登录名重新获取的User,现在的意思是不是赋值一个已追踪的实体就可以了?
@Sammo: 是的
@吴瑞祥: AsNoTracking是不追踪是吧,那默认就是进行追踪咯?
@Sammo: 你在保存前赋值后检查下user的实体追踪状态吧.
@吴瑞祥: OK,哪个属性可以确定它是否被追踪?谢谢了