0

我终于开始检查最新的 EF 版本,但我的测试遇到了一些麻烦。

因此,我的 DAL 层包含我的 .EDMX 文件,并且我正在使用 MS POCO 模板,因此我也有生成的 .TT 文件和类。

我在我创建的 TestProject.DAL 中有一个通用基类,这些类派生自这些类。IE

public class BaseEntity<T> {}
public class Customer : BaseEntity<Customer> {}
public class Product : BaseEntity<Product> {}

然后在我的 TestProject.BLL 层我有一些派生类即

public class TestProject.BLL.Customer : TestProject.DAL.Customer {}
public class TestProject.BLL.Product : TestProject.DAL.Product {}

然后,在我的 UI 层中,我调用了我的 BLL.Customer 对象。我收到一条错误消息,指出未添加对 DAL.Customer 对象的引用等。

我从我的 UI 项目中引用了 BLL 项目,从我的 BLL 项目中引用了 DAL。

为什么 UI 层在该项目中未引用 DAL 层时抱怨它知道 DAL 层?

另外,作为一个附带问题,这看起来像一个“好”的设计吗?

谢谢大家!鹅

4

2 回答 2

1

您的 UI确实引用了 POCO 实体类型——通过BaseEntity.

于 2010-09-30T16:07:54.560 回答
1

Craig 是正确的 - 您的 UI 正在引用 POCO 实体类型。但我会详细说明。

如果您的 UI 项目正在引用 BLL 程序集并且该程序集正在引用 DAL 程序集并且没有公开公开该 DAL 程序集的任何成员,那么您所说的将是正确的。但这不是这里发生的事情。您正在引用 BLL 程序集,并且该程序集中的类型直接继承自 DAL 类型,因此 DAL 类型对您的 UI公开可见的。因此,编译器(正确地)告诉您必须从您的 UI 项目中引用 DAL 程序集。

至于您的“好设计”问题,这始终取决于上下文。在不了解您的任何上下文的情况下,我会犹豫创建这样的继承树。您的子类在 BLL 程序集中的工作是什么?

于 2010-09-30T18:11:57.363 回答