在已研究的域中,rbindlist()
可能有多个Car
,根据DDD概念,Tire
是Car
而aggregate root
是{ {1}}。 “
考虑以下模型:
Tire
我担心EF 6.0 +无法实现此模型。我对吗?有没有什么方法可以实现Value Objects的收集?
答案 0 :(得分:2)
这是规范化持久性(包括您通过EF访问的SQL服务器)的常见问题。实体框架通过不允许您拥有受保护的密钥使其变得更加困难。
一种方法是让一个具有id的Tires表,它将构成与汽车的外键关系的一部分。但是,唯一键的概念违反了值对象不应该依赖于id的事实,并且应该通过值进行比较。勤奋,压倒等于,只有按价值比较才能使用这个解决方案;只要两个轮胎匹配,如果相等比较将返回真,则实际对象是否不同并不重要。我同意,它不漂亮,但使用EF似乎是唯一的解决方案。如果我错了,请有人纠正我。如果您选择此路线,请记住以删除ID的方式将您的域数据映射到DTO。这样你就可以保持轮胎被隔离的事实。
另一个解决方案是在发送到SQL db之前使用Json序列化轮胎(然后在读取时将其反序列化),但如果您需要查询轮胎中的信息,那么这不是我个人建议的(对于例子给我所有使用这种轮胎的汽车。)
PS:Vaughn Vernon在本书中讨论了Hibernate for Java的这个特殊问题:http://www.amazon.co.uk/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577请阅读,它将解决您在此主题上可能遇到的许多问题。
答案 1 :(得分:2)
复杂类型,根据MSDN文档,不能参与关联,也不能包含导航属性,所以这不是正确的方法。 使用EF,唯一的方法是拥有2个表(轮胎表上有一个Id)。您还可以隐藏轮胎表的ID,您可以在Cars表的外键上插入唯一索引,但是当您检查两个轮胎是否相等时,您需要检查两个属性是否相等。