我正在尝试使用区域和依赖注入构建模块化的 ASP.NET MVC 应用程序。该应用程序目前包括以下项目:
- Framework.Contracts(身份验证服务、授权、日志记录的接口)
- 框架(身份验证服务的实现,授权,...)
- Framework.Web(MVC Web 应用程序)
每个插件由一个 MVC 区域项目、合同和服务实现组成:
- EmployeesPlugin.Contracts(IEmployeesService 的接口)
- EmployeesPlugin(IEmployeesService 的实现)
- 雇员插件.MVC
我想使用实体框架数据库优先或模型优先(因为我必须连接现有数据库)。我的问题是我不知道如何松散地耦合我的实体。我不想将它们放入单个共享的 DatabaseLayer 项目中。相反,我想为框架项目定义中心实体(用户、设置、LogEntries,...),并为每个插件定义附加实体(如员工、公司)。
阅读ORM 架构:一个或多个模型(实体框架)后,我想到了创建多个模型(即多个数据上下文)。其实我不喜欢有冗余代码的想法。
我考虑过创建公开每个实体属性的接口。这些接口将按插件放入一个项目中。像IEmployee
暴露FirstName
和LastName
。然后我开始创建一个IEmployeeRepository
返回和创建、编辑和删除员工。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 框架将事物组合在一起。