Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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# efcore有两个dbcontext。如何指定表?_C#_Entity Framework_.net Core_Entity Framework Core - Fatal编程技术网

C# efcore有两个dbcontext。如何指定表?

C# efcore有两个dbcontext。如何指定表?,c#,entity-framework,.net-core,entity-framework-core,C#,Entity Framework,.net Core,Entity Framework Core,我在数据库中有两个DbContexts,希望其中一个只引用一个表(类): 在ApplicationDbContext中,只有一个数据库集: public DbSet<Models.User> Users { get; set; } 公共数据库集用户{get;set;} 但它仍将迁移其他表 我如何做到这一点呢?您的问题在于使用两个而不是一个 dotnet ef迁移添加了Mall20200325-context应用程序dbcontext您的问题比使用两个(而不是一个)更严重 dotn

我在数据库中有两个
DbContext
s,希望其中一个只引用一个表(类):

ApplicationDbContext
中,只有一个数据库集:

public DbSet<Models.User> Users { get; set; }
公共数据库集用户{get;set;}
但它仍将迁移其他表


我如何做到这一点呢?

您的问题在于使用两个而不是一个


dotnet ef迁移添加了Mall20200325-context应用程序dbcontext

您的问题比使用两个(而不是一个)更严重


dotnet ef迁移添加Mall20200325-context应用程序dbcontext

我从中找到了以下解决方案。假设您有
AccountDbContext
ApplicationDbContext
上下文。假设在
AccountDbContext
中定义了实体
Account
,我们希望将
accounts
表从迁移中排除,而在
用户
实体中有对它的引用。因此:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // Ignored table `accounts` from other DbContext in the migration

    modelBuilder.Entity<Account>(entity => {
        entity.ToView("accounts");
        // If the `acoounts` table has some columns you must introduce their
        // names like this (if the properties' names are different from columns' names)    
        entity.Property(e => e.Id)
              .HasColumnName("id");
        entity.Property(e => e.FirstName)
              .HasColumnName("first_name");
        entity.Property(e => e.LastName)
              .HasColumnName("last_name");
    });
    
    // Define the table `users`

    modelBuilder.Entity<User>(entity => {
        entity.ToTable("users");

        entity.HasIndex(e => e.Id)
           .HasName("users_account_id_foreign");

        entity.Property(e => e.Id)
           .HasColumnName("id")
           .HasColumnType("bigint(20) unsigned");

       entity.HasOne(d => d.Account)
           .WithOne(p => p.Users)
           .HasForeignKey<User>(d => d.Id)
           .HasConstraintName("users_account_id_foreign");
        
    });

}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
//在迁移中忽略了来自其他DbContext的表“accounts”
modelBuilder.Entity(Entity=>{
实体。ToView(“账户”);
//如果“accounts”表有一些列,则必须介绍它们的
//这样的名称(如果属性的名称与列的名称不同)
entity.Property(e=>e.Id)
.姓名(“id”);
entity.Property(e=>e.FirstName)
.HasColumnName(“名字”);
entity.Property(e=>e.LastName)
.HasColumnName(“姓氏”);
});
//定义“用户”表`
modelBuilder.Entity(Entity=>{
实体。可转让(“用户”);
entity.HasIndex(e=>e.Id)
.HasName(“用户、帐户、id、国外”);
entity.Property(e=>e.Id)
.HasColumnName(“id”)
.HasColumnType(“bigint(20)unsigned”);
entity.HasOne(d=>d.Account)
.WithOne(p=>p.Users)
.HasForeignKey(d=>d.Id)
.hassConstraintName(“用户\帐户\ id \外国”);
});
}

我从中找到了以下解决方案。假设您有
AccountDbContext
ApplicationDbContext
上下文。假设在
AccountDbContext
中定义了实体
Account
,我们希望将
accounts
表从迁移中排除,而在
用户
实体中有对它的引用。因此:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    // Ignored table `accounts` from other DbContext in the migration

    modelBuilder.Entity<Account>(entity => {
        entity.ToView("accounts");
        // If the `acoounts` table has some columns you must introduce their
        // names like this (if the properties' names are different from columns' names)    
        entity.Property(e => e.Id)
              .HasColumnName("id");
        entity.Property(e => e.FirstName)
              .HasColumnName("first_name");
        entity.Property(e => e.LastName)
              .HasColumnName("last_name");
    });
    
    // Define the table `users`

    modelBuilder.Entity<User>(entity => {
        entity.ToTable("users");

        entity.HasIndex(e => e.Id)
           .HasName("users_account_id_foreign");

        entity.Property(e => e.Id)
           .HasColumnName("id")
           .HasColumnType("bigint(20) unsigned");

       entity.HasOne(d => d.Account)
           .WithOne(p => p.Users)
           .HasForeignKey<User>(d => d.Id)
           .HasConstraintName("users_account_id_foreign");
        
    });

}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
//在迁移中忽略了来自其他DbContext的表“accounts”
modelBuilder.Entity(Entity=>{
实体。ToView(“账户”);
//如果“accounts”表有一些列,则必须介绍它们的
//这样的名称(如果属性的名称与列的名称不同)
entity.Property(e=>e.Id)
.姓名(“id”);
entity.Property(e=>e.FirstName)
.HasColumnName(“名字”);
entity.Property(e=>e.LastName)
.HasColumnName(“姓氏”);
});
//定义“用户”表`
modelBuilder.Entity(Entity=>{
实体。可转让(“用户”);
entity.HasIndex(e=>e.Id)
.HasName(“用户、帐户、id、国外”);
entity.Property(e=>e.Id)
.HasColumnName(“id”)
.HasColumnType(“bigint(20)unsigned”);
entity.HasOne(d=>d.Account)
.WithOne(p=>p.Users)
.HasForeignKey(d=>d.Id)
.hassConstraintName(“用户\帐户\ id \外国”);
});
}

添加迁移过程比较两个
IModel
实例,一个来自上下文的
OnModelCreating
实例,另一个编译到程序集中并从
imiglationassembly
服务加载

迁移程序集实现应只考虑模型快照和迁移,使用匹配的<代码> DbCutExtActEng/<代码> < /P>


如果您看到的迁移操作出乎意料,那么在创建两个上下文之前,我想知道您的项目是什么样子的。您是否有一个生成的
modelsnashot
,其属性不匹配
[DbContext]
吗?

添加迁移过程比较两个
IModel
实例,一个来自您的上下文的
OnModelCreating
另一个编译到程序集中并从
imigrationassembly
服务加载

迁移程序集实现应只考虑模型快照和迁移,使用匹配的<代码> DbCutExtActEng/<代码> < /P>


如果您看到的迁移操作出乎意料,那么在创建两个上下文之前,我想知道您的项目是什么样子的。您是否有一个生成的
ModelSnapshot
,其
[DbContext]
属性不匹配?

您能说明您在寻找什么吗?我是否理解您想要两个单独的DBContext,每个都映射到一个单独的表?但是您想确保其他表仍然作为迁移的一部分创建,即使它们没有映射到DbContext?(我很可能是误会了,我只是推测一下。)@JeremyCaney谢谢。我希望DbContext中未映射的表不会被迁移。如果我使用dotnete ef迁移,请添加xxx---conntext ApplicationDbContext。。某些未在ApplicationDbContext中映射的表也已迁移。但它们被映射到另一个DbContext中。我希望这些表是分开的。如果在
用户中有其他实体作为导航属性,则它们由datacontext间接映射。您必须选择这些字段或将它们包含在您的上下文中。@MatJ。不,用户仅映射到ApplicationDbContext中。其他表(如Orders)位于另一个DbContext中。但是,当我迁移ApplicationDbContext时,它还将迁移其他表(包括Orders)