使用EntityFramework,如何创建具有相同上下文但没有自动增量ID的两个数据库?

时间:2017-11-16 13:02:04

标签: c# sql entity-framework

我正在使用EntityFramework Code-First,其上下文的模型如下:

public class Person {
  public int ID {get;set;}
  public string Name {get;set;}
}

带有像

这样的上下文
public class DataContext: DbContext {
   public DbSet<Person> People {get;set;}
}

这会保存到DatabaseA中。当我插入一个新人时,它会自动为该人生成一个ID。我需要一个具有完全相同结构的DatabaseB,但没有 ID自动生成。我想将一些记录从DatabaseA传输到DatabaseB,但没有DatabaseB生成新的ID。我知道我可以包装

[DatabaseGenerated(DatabaseGeneratedOption.None)]

围绕ID属性,但我只希望它在不影响DatabaseA的情况下应用于DatabaseB。

所以到目前为止,我提出的唯一解决方案是拥有一个新模型

public class PersonB : Person {
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public new int ID { get; set; }
}

和新的背景

public class DataContextB : DbContext { 
     public DbSet<PersonB> People {get;set;}
}

但这有点令人讨厌,因为我必须维护两组完全相同的模型。理想情况下,我希望能够做些什么 使用(var db = new DataContextB){ D b。 }

1 个答案:

答案 0 :(得分:3)

您可以覆盖DbContext的OnModelCreating功能并编写一些流畅的api代码。

请看一下这种方法

public class DataContextB : DbContext
{
    public DbSet<Person> People {get;set;}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>().Property(t => t.ID)
                    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

        base.OnModelCreating(modelBuilder);
    }
}