Entity framework 在多个项目中分离DbContext

Entity framework 在多个项目中分离DbContext,entity-framework,asp.net-mvc-4,Entity Framework,Asp.net Mvc 4,我创建了一个公司MVC4“模板”,其中包含基本的帮助程序、用户功能等,只是每个项目都需要的东西 现在,我尝试将用户部分分离开来,它由3部分组成:控制器/模型/视图、业务层和数据层 现在我遇到了一个问题,我将数据层部分取出,并将其放在一个单独的项目中,该项目将成为一个私有的Nuget包 但是包不知道DbContext,因为它位于实际项目网站的数据层中 网站的DbContext当前如下所示: public class DataContext : DbContext { .... pu

我创建了一个公司MVC4“模板”,其中包含基本的帮助程序、用户功能等,只是每个项目都需要的东西

现在,我尝试将
用户
部分分离开来,它由3部分组成:控制器/模型/视图、业务层和数据层

现在我遇到了一个问题,我将数据层部分取出,并将其放在一个单独的项目中,该项目将成为一个私有的Nuget包

但是包不知道
DbContext
,因为它位于实际项目网站的数据层中

网站的DbContext当前如下所示:

public class DataContext : DbContext
{
    ....
    public DbSet<Language> Languages { get; set; }
    public DbSet<User> Users { get; set; }
    ....
    public DbSet<Reservation> Reservations { get; set; }
    ....
}
公共类DataContext:DbContext
{
....
公共数据库集语言{get;set;}
公共数据库集用户{get;set;}
....
公共数据库集保留{get;set;}
....
}
语言
用户
将放在单独的项目/NuGet包中,
保留
将保留在网站上,因为它是特定于网站的

语言
用户
表彼此没有引用,但
保留
同时引用了
用户
语言


这里有哪些选项可以保持完整的代码优先模型,包括迁移。我是否可以为每个项目/NuGet分别创建多个
DbContext
,code first迁移是否能够解决这个问题,或者是否有更好的方法?

如果您的预订包含指向语言和用户类的链接,那么您必须使用相同的上下文


如果您想要更松散耦合的实现,那么只包含id而不是实际的类,那么您可以使用单独的上下文,但是您将失去引用对象等的便利性。其实施取决于你的项目有多大,以及你计划如何更新解决方案。

问题是,我有多个网站使用同一个“后台”,当一个bug被更新时,我必须检查所有这些项目并更新源代码中的bug。如果我使用包,我就不会有这个问题。您应该使用存储库模型和接口来分离实际的实现。这样,您就可以从前端站点隐藏实现细节(EF上下文)。因此,您将返回IBackofficeService或类似的内容,而不是将DataContext公开给前端。然后使用DataContext创建和实现该接口。你也应该考虑使用某种类型的IOC(Control Control)库,例如Unity。在这种情况下,您可以注册您的实现,并在MVC中创建类似MyController(IBackofficeService服务)的控制器。您还可以使用存储库模型检查我正在为更真实的应用程序工作的项目,我将查看它。谢谢,我已经在使用Unity了。是的。我实际上认为这是不可能的。我有一个表
Posts
,其中包含编写该表的
User
,但
Users
也包含
Post
的列表,并将给出循环引用。