加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 实体框架插件架构推荐

发布时间:2020-12-16 09:37:27 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试使用区域和依赖注入构建模块化的ASP.NET MVC应用程序.该应用程序目前包括以下项目: Framework.Contracts(用于身份验证服务,授权,日志记录的接口) 框架(认证服务的实施,……) Framework.Web(MVC Web应用程序) 每个插件都包含一个MVC Area项目,合同
我正在尝试使用区域和依赖注入构建模块化的ASP.NET MVC应用程序.该应用程序目前包括以下项目:

> Framework.Contracts(用于身份验证服务,授权,日志记录的接口)
>框架(认证服务的实施,……)
> Framework.Web(MVC Web应用程序)

每个插件都包含一个MVC Area项目,合同和服务实现:

> EmployeesPlugin.Contracts(IEmployeesService的接口)
> EmployeesPlugin(IEmployeesService的实现)
> EmployeesPlugin.MVC

我想使用Entity Framework Database First或Model First(因为我必须连接现有数据库).我的问题是我不知道如何松散地耦合我的实体.我不想将它们放入一个共享的DatabaseLayer项目中.相反,我想为Framework项目定义中心实体(User,Settings,LogEntries,…)以及为每个插件定义其他实体(如Employee,Company).

阅读ORM Architecture: One or Multiple Models (Entity Framework)后,我考虑创建多个模型(即多个数据上下文).实际上我不喜欢冗余代码的想法.

我想过创建暴露每个实体属性的接口.这些接口将按插件放入项目中.就像IEmployee公开FirstName和LastName一样.然后我开始创建一个IEmployeeRepository来返回并创建,编辑和删除Employees.但是,在仅公开IEmployee而没有具体类时,创建员工不起作用.

另一个问题是实体Employee包含对其他项目/插件中的实体的引用.让我们说一个员工主持了许多项目.因此,我想创建一个没有项目引用的通用IEmployee接口和一个包含对项目的引用的IEmployeeProjects接口.这样我就可以在一个中央数据库层项目中创建一个类Employee,它实现了IEmployee添加`IEmployeeProjects:

public class Employee : IEmployee,IEmployeeProjects
{   
    // From IEmployee interface
    public string FirstName { get; set; }
    public string LastName { get; set; }

    // From IEmployeeProject interface
    public virtual ICollection<Project> Projects { get; set; }
}

问题是我不知道如何使用Entity框架将各种东西融合在一起.

解决方法

你通过消除它们之间的任何硬关系来创造松散的偶然.相反,只需使用ID来引用其他实体.这也意味着每个插件都使用它自己的DbContext.

然后在每个插件中使用存储库来加载引用的实体.这也意味着每个插件必须在一个单独的程序集中定义它们的存储库接口,这些接口可以被其他插件使用.

我还通常创建一个核心对象,在其中我定义核心公开的所有entites,服务和存储库.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读