C# EF:如何在同一解决方案中跨多个项目使用DB?

C# EF:如何在同一解决方案中跨多个项目使用DB?,c#,asp.net-mvc,database,entity-framework,entity-framework-6,C#,Asp.net Mvc,Database,Entity Framework,Entity Framework 6,我有三个项目: 包含所有模型的一个 一个包含我前端的控制器 一个包含我的客户前端的控制器 我使用实体框架(启用迁移、添加迁移、更新数据库)为项目(1)创建了一个数据库。 然后我启动项目(2),创建一个新项目,并将该项目保存在以前创建的数据库中。 但是,它没有使用所述数据库,而是创建了一个新数据库(与(1)中的数据库相同),并将项目保存在那里。 当启动项目(3)时,我相当肯定会发生同样的事情,创建第三个相同的数据库。然而,由于(3)不能创建新项目,只能读取它们,因此不会发生任何事情。 这显然不是我

我有三个项目:

  • 包含所有模型的一个
  • 一个包含我前端的控制器
  • 一个包含我的客户前端的控制器
  • 我使用实体框架(启用迁移、添加迁移、更新数据库)为项目(1)创建了一个数据库。 然后我启动项目(2),创建一个新项目,并将该项目保存在以前创建的数据库中。 但是,它没有使用所述数据库,而是创建了一个新数据库(与(1)中的数据库相同),并将项目保存在那里。 当启动项目(3)时,我相当肯定会发生同样的事情,创建第三个相同的数据库。然而,由于(3)不能创建新项目,只能读取它们,因此不会发生任何事情。 这显然不是我想要的,因为我需要使用(3)中的(2)创建的项目(理想情况下将它们保存在(1)中创建的数据库中),所以我如何实现每个项目使用相同的数据库

    所有三个项目的连接字符串都是相同的:

    <connectionStrings>
        <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-db.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
      </connectionStrings>
    
    
    
    第二个项目有一个类“Startup.Auth.cs”,其他项目没有。因为我不确定是否与此有关,这里有一部分:

    public partial class Startup
        {
            public void ConfigureAuth(IAppBuilder app)
            {
                // Configure the db context, user manager and signin manager to use a single instance per request
                app.CreatePerOwinContext(MyContext2.Create);
                app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
                app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
    
    公共部分类启动
    {
    public void ConfigureAuth(IAppBuilder应用程序)
    {
    //将数据库上下文、用户管理器和登录管理器配置为每个请求使用一个实例
    app.CreatePerOwinContext(MyContext2.Create);
    app.CreatePerOwinContext(ApplicationUserManager.Create);
    app.CreatePerOwinContext(ApplicationSignInManager.Create);
    
    这是项目(1)中我创建上下文的部分。其他项目没有:

    public class MyContext2 : IdentityDbContext<ApplicationUser>
        {
            public MyContext2()
                : base("DefaultConnection")
            {
            }
    
            public DbSet<Items> items { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            }
        }
    
    公共类MyContext2:IdentityDbContext
    {
    公共MyContext2()
    :base(“默认连接”)
    {
    }
    公共数据库集项{get;set;}
    模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
    {
    基于模型创建(modelBuilder);
    modelBuilder.Conventions.Remove();
    }
    }
    
    Intellisense工作正常,它会自动填写支持的db.items,因此会设置引用。我正在通过
    private MyContext2 db=new Context()
    调用数据库


    无论我如何尝试,都无法使其正常工作,非常感谢您的帮助!

    您的连接字符串不正确,因为每个项目都有自己的DataDirectory如果我在项目之外的某个地方创建了字符串,例如在解决方案目录中,您能否使用SQL Server?一位同事是able来帮我。它现在按预期工作。谢谢你把我送到正确的方向。:D