Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多租户代码优先迁移上的多DbContext_C#_Asp.net_Entity Framework 6_Asp.net Web Api2 - Fatal编程技术网

C# 多租户代码优先迁移上的多DbContext

C# 多租户代码优先迁移上的多DbContext,c#,asp.net,entity-framework-6,asp.net-web-api2,C#,Asp.net,Entity Framework 6,Asp.net Web Api2,您好,我有一个与webapi在多个api上共享的系统,每个api都有一个带有Entity Framework 6的DbContext,它使用单个dll作为模型的引用 示例模型产品可以从具有相应DbContext的invoiceapi项目中的InvoiceItem引用 相同的产品模型也可以由commercialapi中的OrderItem模型引用,该模型也具有DbContext 我怀疑当我在BaseApi项目上运行DbContext迁移时,我的数据库已更新或创建,但当在InvoiceApi上运行迁

您好,我有一个与webapi在多个api上共享的系统,每个api都有一个带有Entity Framework 6的DbContext,它使用单个dll作为模型的引用

示例模型产品可以从具有相应DbContext的invoiceapi项目中的InvoiceItem引用

相同的产品模型也可以由commercialapi中的OrderItem模型引用,该模型也具有DbContext

我怀疑当我在BaseApi项目上运行DbContext迁移时,我的数据库已更新或创建,但当在InvoiceApi上运行迁移时,我收到一个错误,即Produto对象已存在

这个系统有几个api,每个api都有一个连接在同一模式和数据库中的Datacontext。我怀疑是否有一种方式,迁移只会在同一模式和数据库中升级其Datacontext的模型?这是一种不创建包含所有模型的单独DataContext项目的方法吗

对不起,英语不好

//Project ApiModels(this project has only the Models, this models are shared to others projects

public class Produto
{
     [Key]
     public int Id {get;set;}
     public string Nome {get;set;}
}

public class ItemNota
{
     [Key]
     public int Id {get;set;}

     public int ProdutoId { get;set;}

     public virtual Produto Produto { get;set;}
}

public class OrderItem
{
     [Key]
     public int Id {get;set;}

     public int ProdutoId { get;set;}

     public virtual Produto Produto { get;set;}
}

//Project BaseApi this project has the webapi of the basic datas like products, clients, here i enabled the migrations and referenced the apiModels dll 

public class DataContext : DbContext, IDbContext
{
    public DataContext(string connectionString)            
        : base(connectionString)
    {
        Database.SetInitializer(new DataContextInitializer());            
    }

    public DataContext()          
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();            

    }

    public DbSet<Contador> Contador { get; set; }
    public DbSet<Parametro> Parametro { get; set; }
    public DbSet<Participante> Participante { get; set; }
    public DbSet<Produto> Produto { get; set; }
    public DbSet<UniMed> UniMed { get; set; }
}


public class DataContextInitializer : IDatabaseInitializer<DataContext>
{
    public void InitializeDatabase(DataContext context)
    {
        Configuration cfg = new Configuration(); // migration configuration class
        cfg.AutomaticMigrationsEnabled = true;
        cfg.AutomaticMigrationDataLossAllowed = false;
        cfg.TargetDatabase =
           new DbConnectionInfo(
              context.Database.Connection.ConnectionString,
              "System.Data.SqlClient");

        DbMigrator dbMigrator = new DbMigrator(cfg);            
        dbMigrator.Update();
    }
}
//项目ApiModels(此项目只有模型,此模型共享给其他项目
公共类产品
{
[关键]
公共int Id{get;set;}
公共字符串Nome{get;set;}
}
公共类项目
{
[关键]
公共int Id{get;set;}
public int ProdutoId{get;set;}
公共虚拟Produto Produto{get;set;}
}
公共类OrderItem
{
[关键]
公共int Id{get;set;}
public int ProdutoId{get;set;}
公共虚拟Produto Produto{get;set;}
}
//Project BaseApi此项目具有产品、客户端等基本数据的webapi,这里我启用了迁移并引用了apiModels dll
公共类DataContext:DbContext,IDbContext
{
公共数据上下文(字符串连接字符串)
:基本(连接字符串)
{
SetInitializer(新的DataContextInitializer());
}
公共数据上下文()
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
公共DbSet Contador{get;set;}
公共DbSet参数{get;set;}
公共DbSet Participante{get;set;}
公共DbSet Produto{get;set;}
公共DbSet UniMed{get;set;}
}
公共类DataContextInitializer:IDatabaseInitializer
{
public void InitializeDatabase(DataContext上下文)
{
Configuration cfg=new Configuration();//迁移配置类
cfg.AutomaticMigrationsEnabled=true;
cfg.AutomaticMigrationDataLossAllowed=false;
cfg.TargetDatabase=
新数据库连接信息(
context.Database.Connection.ConnectionString,
“System.Data.SqlClient”);
DbMigrator DbMigrator=新的DbMigrator(cfg);
dbMigrator.Update();
}
}
//项目InvoiceApi此项目具有发票数据的webapi,在这里我启用了迁移并引用了apiModels dll

public class DataContext : DbContext, IDbContext
{
    public DataContext(string connectionString)            
        : base(connectionString)
    {
        Database.SetInitializer(new DataContextInitializer());            
    }

    public DataContext()          
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();            

    }

    public DbSet<Invoice> Invoice { get; set; }
    public DbSet<InvoiceItem> InvoiceItem { get; set; }        
}

public class DataContextInitializer : IDatabaseInitializer<DataContext>
{
    public void InitializeDatabase(DataContext context)
    {
        Configuration cfg = new Configuration(); // migration configuration class
        cfg.AutomaticMigrationsEnabled = true;
        cfg.AutomaticMigrationDataLossAllowed = false;
        cfg.TargetDatabase =
           new DbConnectionInfo(
              context.Database.Connection.ConnectionString,
              "System.Data.SqlClient");

        DbMigrator dbMigrator = new DbMigrator(cfg);            
        dbMigrator.Update();
    }
}
公共类DataContext:DbContext,IDbContext { 公共数据上下文(字符串连接字符串) :基本(连接字符串) { SetInitializer(新的DataContextInitializer()); } 公共数据上下文() { } 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); } 公共数据库集发票{get;set;} 公共数据库集InvoiceItem{get;set;} } 公共类DataContextInitializer:IDatabaseInitializer { public void InitializeDatabase(DataContext上下文) { Configuration cfg=new Configuration();//迁移配置类 cfg.AutomaticMigrationsEnabled=true; cfg.AutomaticMigrationDataLossAllowed=false; cfg.TargetDatabase= 新数据库连接信息( context.Database.Connection.ConnectionString, “System.Data.SqlClient”); DbMigrator DbMigrator=新的DbMigrator(cfg); dbMigrator.Update(); } }
请显示重现问题的代码。等等-您只是想管理具有多个数据上下文的迁移吗?是的,但我在ApiBase项目上运行了第一次迁移好的,它是创建或更新数据库,现在在invoiceapi项目上运行迁移时,我收到一个错误,即Produto对象已经存在,并且确实存在k:两个上下文的名称完全相同-这是一个拼写错误吗?我有一种管理多个上下文的方法,但是我不确定当上下文共享相同的名称时它的效果如何。使用包管理器控制台非常容易-你认为这可能有帮助吗?相同的上下文名称但不同的项目…我更改了上下文名称,但我仍然我有同样的错误,我认为这是不可能的,我必须创建一个与其他API项目的上下文共享的分离项目。我想在微环境中划分上下文,以考虑将来改变API技术的可能性,并考虑干模式。请显示复制问题的代码。等待。-您只是想管理具有多个数据上下文的迁移吗?是的,但我在ApiBase项目上运行了第一次迁移好的,它是创建或更新数据库,现在在invoiceapi项目上运行迁移时,我收到一个错误,即Produto对象已经存在并且非常快:两个上下文的名称完全相同-这是一个错误吗输入错误?我有一种管理多个上下文的方法,但是我不确定当上下文共享相同的名称时它有多有效。使用Package Manager控制台很容易-你认为这可能有帮助吗?相同的上下文名称但不同的项目…我更改了上下文名称,但仍然有相同的错误,我认为这是不可能的,我必须为与其他api项目共享此内容的上下文创建一个单独的项目