c# - 在应用程序层之间共享 Entity Framework 模型的最佳方法

标签 c# asp.net asp.net-mvc entity-framework

我想创建一个具有多个层(经典层设计)的 asp.net 应用程序:业务层和表示层。数据层似乎已过时,因为 EF 完成了所有工作。

因此,当我在业务层创建 EF 模型时,我无法使用表示层中的实体,因为我无法为显示和验证等添加数据注释(尤其是显示属性通常是表示层的一部分)。将所有数据复制到表示层中类似的“viewmodel”类对我来说似乎不太好。

那么有没有一种好的方法可以在业务层中创建对象上下文并为实体共享一个“契约”-assembly?我发现的大多数示例都将所有内容都放在一个程序集中,在我看来,这不是更复杂应用程序的最佳方法。

最佳答案

您应该将 EF 从您的业务层中抽象出来,切勿直接使用此类框架。我通常会创建一个通用存储库接口(interface)和一个实现该接口(interface)的通用 EF 存储库(这是您的数据层)。 IoC 框架将负责在运行时注入(inject)正确的实现。

此外,您准确描述了表示层中 ViewModel 的需求。他们负责仅在 View 上显示您需要的信息以及基于数据注释的验证。一开始它们可能看起来像是您的域实体的副本,但最终它会为您省去很多麻烦,这是绝对可行的方法。

您的业务层应该生成域实体,在您的 Controller 中,您将它们映射到您的 ViewModel。你可以使用 AutoMapper为此。

可以查看this question并回答有关服务/业务层和领域/ View 模型的更多信息。

关于c# - 在应用程序层之间共享 Entity Framework 模型的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19109455/

相关文章:

c# - 根据参数使用 SingleInstance 委托(delegate)工厂

c# - 以编程方式向 TFS 添加新文件

c# - 通过元数据嵌入版本信息?

javascript - 在 ASP.NET 中管理 AngularJS 网络应用程序(替代 RequireJS)

c# - ASP.NET 输出缓存位置?

asp.net - 当在代码中设置 PageSize 时,DataPager 停止工作

c# - Azure 应用服务(移动)上的数据库上下文失败

javascript - 在 Razor 语法中嵌入javascript变量

c# - 来自枚举的单选按钮组

jquery - <text> 中的代码不再执行