Entity Framework 实践系列 —— 搞好关系 - 两情相悦(双向一对一)
这里的写法应该是单向的一对一关系。
需要让Code First知道哪个类为主哪个类为辅。如果两端均为Required,不能简单地从多重关系上推测出来。 如果你开始于HasRequired,你会在 WithReuired的位置有两个附加选择:WithRequiredPrincipal 和WithRequiredDependent。选择WithRequiredPrincipal将会使实体配置为主类,意味着该类包含 有关系的主键。选择WithRequiredDependent会使实体配置为辅助类,意味着该类包含有关系的外键。
双向一对一不符合设计,加入第三个表关联双向一对一的两个表?不知能否加入新的表作为辅助。
上面这兄弟的意思是说,除了单向一对一之外,双向一对一就只能是对一个表的拆分那种方式?
比如我上面说的,想要在订单类order和派送类deliver,它们之间需要互相访问,而且是一一对应关系,究竟谁应该是辅助,谁是主体?
@chutianshu_1981:
我所知道的flunt API只能是这样。order可以作为主类,deliver作为辅助类。按理来说deliver也是根据order来派送的。
你的测试中:提示表中循环 ,是因为那两个配置分别表示 order作为deliver的辅助、deliver作为order的辅助,当然循环了。
看过了,用站长的方式在我的项目中会出现一个错误,提示表中循环
@chutianshu_1981: 具体错误提示信息是什么?
@dudu: 我已经将类改动了,只记得前两天提示的是在Deliver中生成OrderId会导致循环。
我更改的方式是在Order和Deliver类中删除对方的Id,只保留一个对方的类对象property
使用
modelBuilder.Entity<Order>().HasRequired(o => o.Deliver)
.WithRequiredDependent()
.Map(o => o.MapKey("DeliverId"));
modelBuilder.Entity<Deliver>().HasRequired(d => d.Order)
.WithRequiredDependent()
.Map(d => d.MapKey("OrderId"));
编译通过,而且数据库表也正常了,不过对EntityFramework工作原理还是一知半解,还需要好好看本书。