在多个项目中共享数据库,代码第一种方法

时间:2015-03-23 22:53:34

标签: c# .net entity-framework

我有两个项目内部vs解决方案

Product.DomainProduct.Web.UI

在这两个项目中,我想使用代码优先方法,并能够使用数据(域和UI项目)。

所以我创建了内部项目简单类,它实现了DbContext 我有两个项目,Product.Domain和Product.UI

我正在使用实体框架代码第一种方法。在MasterProject内部,我有一个代表db table Products

的类
public class ProductsDbContext : DbContext{
      public ProductsDbContext() : base("name=ProductsDbContext") { }
 }

在我的app.config中,我有连接字符串ProductsDbContext,它处理与db的连接。

现在我想在UI项目中使用ApplicationDbContext,它应该使用来自域层的相同数据库和存储标识表(在创建域层时数据库中最初不存在) 我试图在web.config连接字符串中设置ProductsDbContext并在ApplicationDbContext构造函数中使用,如

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
         : base("name=ProductsDbContext") { }
    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }       
}

我应该如何继续在Configuration.cs Seed()中使用ApplicationDbContext,以便将样本用户和样本Product存储在ProductsDbContext中定义的同一个数据库中。

我正在寻找更多描述这个解决方案,当数据库最初在一个项目(域)中创建时,而不是在不同项目中再次使用,并且可能使用新表(ui)进行更新。这是正确的方法吗?分享的任何例子?

1 个答案:

答案 0 :(得分:0)

如果你想在2个单独的项目中使用2个DbContexts,它们将永远脱节。

E.g。您将无法执行以下操作:

Context1.Users.Where(u => Context2.Products.Any(p => p.User == u))

因此,您将失去在两个数据库中使用联接的能力。

种子数据的一种方法是使用conde首次迁移,将它们指向两个项目,例如:

    主项目
  • Enable-Migrations
  • Web上的
  • Enable-Migrations项目

在visual studio中,在Package Manager控制台中,您可以选择要定位的项目。

然后,您可以在相应的项目Configuration.cs中添加迁移和种子数据。