ASP.NET 5 ,想要将实体框架从 Web 项目中分离出来

Posted

技术标签:

【中文标题】ASP.NET 5 ,想要将实体框架从 Web 项目中分离出来【英文标题】:ASP.NET 5 , wanted to separate entity framework from Web Project 【发布时间】:2016-06-01 23:47:18 【问题描述】:

我正在尝试实现以下应用程序结构

App.Model -- 用户模型 -- 订单模型

应用程序服务 -- 用户服务 -- 用户服务

App.Entity -- 数据库上下文

网站 -- 网络API -- 调用服务

大部分 ASP.NET 5 应用实例,在网站的启动文件中初始化实体框架。比如 .AddEntityFrameowrk() .. 等等。

需要知道如何将实体分离到单独的项目中,以及如果我们从服务项目中调用存储库,我们如何启动 DBContext。(因为启动文件不适用于类库)

【问题讨论】:

我相信,只要您使用的是 asp.net ,您就需要在启动类中初始化您的服务,您可以将 AddEntityFrameowrk() 移动到任何项目中的方法的一部分,但在一天结束时,您必须从启动类中调用它 这是否意味着 Entity 与 ASP.NET 5 紧密耦合?应该有某种方式分离,因为技术是新的,无法找到有关工作流程的完整信息。 EF 无论如何都没有与 ASP.NET 紧密耦合,只是您的问题是关于在项目中分离 EF 并仍在 Web 应用程序中使用它,除非我的问题不正确跨度> 是的,你没看错。我不希望 EF 与 Web 应用程序紧密绑定。我希望网站与 => webAPI => Service => EF 进行通信。 由于asp.net web应用程序是代码的入口点,它将负责启动应用程序,这是通过start类方法完成的。 【参考方案1】:

在之前的项目中,我采取了在一个解决方案(或多个解决方案)中维护多个 ASP.NET 项目的方法。这将使您能够从 Web 应用程序中删除 EF 依赖项,并使 Web 应用程序仅与处理所有 EF 的 API 对话

过去,我创建了一个专用的“域”项目,其中包含所有模型,并且可以被您的 Web 应用程序和 API 项目引用。

所以项目结构应该是这样的

域项目:仅包含代表您的模型的 c# 类。从一个“空”项目开始

API:包含您的 Web API。使用 EF 与数据库交互。我会亲自为您的模型搭建 API,但这是个人选择。现在,在 ASP.NET core 1.0 RC1 中,web api 模板很差,所以我会从完整的“web 应用程序”开始,并删除所有默认视图、控制器、脚本等。引用域项目,以便您可以从模型中搭建 API 控制器

Web 应用程序:您的主要 Web 应用程序项目。从“Web 应用程序”模板开始,但使用 HttpClient 我您的控制器来使用 api 进行数据交互。过去,我创建了一组静态“api 辅助类”来简化这项任务,但这又是个人风格的选择。引用域项目,以便您可以将传入的 JSON 响应转换为完整的 .net 模型

【讨论】:

以上是关于ASP.NET 5 ,想要将实体框架从 Web 项目中分离出来的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET MVC 项目中无法使用实体框架连接到 Oracle 数据库

带有实体框架的 ASP.Net Core Web API 使用存储过程有啥好处吗? [关闭]

如何从实体框架 4 升级到 EF6?

asp.net中的ADO.NET实体框架适用于不同的数据库及其性能

如何在 Asp.net MVC 和实体框架中分页时应用过滤器?

如何在 Asp.Net 5 (MVC 6) 中使用实体框架 6.x