我们正在尝试使用实体框架 (EF) 和域驱动设计 (DDD) 样式模式方法创建一个 ASP.NET MVC 4 应用程序。正如您在我们的领域层部分看到的,我们有一个复杂的设计。我们需要使用惰性和急切的方法加载实体。不幸的是,我们在 Entity Framework 中对这些方法有一个很大的问题。
据我们了解,在实体框架中,对于预加载,我们必须使用Include
方法并给出属性字符串和属性等。(在Hibernate和 Java 中,我们可以使用成员顶部的注释来预加载,这比这种方法)。
但可怕的问题是我们有继承结构和重的多态性。在这些状态下,我们没有应该包含的字符串,因为我们不知道选择了类的哪个派生类来理解应该包含哪些属性。
例如,如您所见,结果有一个项目集合,然后决定向该集合添加一些组,并且每个组都有一些组和字段(如组合模式)。现在假设我们想要加载一个类似于上面讨论的结果。当我想写一个给定包含的字符串时,我不知道这个结果的哪些项目是组。因为我们无法预测这些项目是组,所以这些组有一个应该加载的项目集合。
this.Items = new List<Item>
{
new Group(
a,
new List<Item>
{
new Field(b),
new Field(c),
new Field(d),
最后我们有一个关键问题:实体框架是为具有复杂域和 DDD 方法的企业应用程序设计的吗?如果不是,我们如何在 C# 软件工程和企业应用中遵循 Martin Fowler 和 Eric Evans 的方法?