系统中有两个表,部门表和用户表,一对多的关系,已建立好,现在部门里有个部门负责人,这时如果在部门里添加一个对用户的引用 public virtual SysUser SysUser { get; set; },更新EF就会报错,可能会导致循环或多重级联路径,应该如何修改呢?谢谢
赞同1楼。复杂性确实高,还需要转变思路,按照DDD的思想去设计实体;
你的问题应该是出在导航属性上,可以用FluentAPI删除外键。
兄弟,按DDD我这个实体如何修改呢?
@happydaily: 从你的导航属性上看,是符合领域实体的。这个就和一个的数据表实体不太一样。
1.EF坑多,实在太多
这一点没有人会否定.当然你可以说你很牛,但事实不会因为你牛就可以说不存在.从博客园中的博问中大家关于EF的提问量就问题的怪异程度就可以看出来.
2.性能欠佳
此刻有人说你掉进了坑里.
第一、掉进坑里了也是设计的复杂性带来的;
第二、要证明实际性能差,最直接的方法:测试.---让数据告诉你,你自己去写、写到你觉得所谓的公平满意为止.
连接地址:http://www.cnblogs.com/humble/p/3472764.html(大家可以用自己最喜欢、觉得最好的版本来测试)
3.原理上和数据库的本质查询隔得太远
对数据库的查询,本质上是sql在起作用.而EF的出发点是用自身的机制维护实体对象的关系及产生sql.
原理上虽然很清楚,但关系的维护带来了诸多开销成本.
事实告诉我们复杂的关系产生的sql性能时常极低.(不要说你们没有看见过很垃圾的sql产生)
4.除了sqlserver支持良好外,其他数据库支持不是很好
这是重复引用的结果,导航属性导致的
这是由于你的A实体中有对B的关联引用,而在B实体中又有对A的引用,这样在进行EF更新时,由于你建立了表关联,所以,会关联更新,这时,就出现了循环更新的问题.
解决:去掉B实体对A实体的引用
你说的太对了,这其实是表设计的不对导致EF无法自动生成表,不是EF的错,相反他帮助我们识别了设计的问题。