如何在我的 C# Web 应用程序的所有层之间共享自动生成的实体数据模型(生成的对象类),同时只授予数据层中的查询访问权限?这使用了典型的 3 层方法:数据、业务、表示。
我的数据层将一个返回IEnumerable<T>
到我的业务层,但我不能将类型 T 返回到表示层,因为我不希望表示层知道数据层的存在 - 这是实体框架自动生成我的类的地方。
建议使用仅包含数据模型的单独层,但我不确定如何将数据模型与实体框架提供的查询功能分开。
如何在我的 C# Web 应用程序的所有层之间共享自动生成的实体数据模型(生成的对象类),同时只授予数据层中的查询访问权限?这使用了典型的 3 层方法:数据、业务、表示。
我的数据层将一个返回IEnumerable<T>
到我的业务层,但我不能将类型 T 返回到表示层,因为我不希望表示层知道数据层的存在 - 这是实体框架自动生成我的类的地方。
建议使用仅包含数据模型的单独层,但我不确定如何将数据模型与实体框架提供的查询功能分开。
如果您使用POCO 实体(.NET 4+),那么这很容易(或者至少更容易)。有这种可能吗?
您可以像 Ben 所说的那样创建 DTO,但是您基本上是在简化和复制每个实体。如果您愿意,EF2 将创建“简化”实体并动态添加更改跟踪、延迟加载等。
否则答案是你不能。如果实体依赖于实体框架,那么您不能在整个应用程序中使用它们而不拖动该依赖项。在这种情况下,您必须使用 DTO。这是没有 POCO 实体的 EF 1 或 EF 2 的第 3 方选项。 http://automapper.codeplex.com/
编辑:这里有一些有用的链接可以了解更多关于这一切的信息:
您可以从您的数据实体创建DTO并将您的 DTO 传递给表示层。