我正在使用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。 }
答案 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);
}
}