我有两个数据库恰好具有相同的表名。实体给我一个InvalidOperationException,声明“实体类型'PmsUser'和'AcctUser'不能共享表'NGUSERS'......
我使用代码优先方法创建了这些。
我的模型看起来像
[Table("NGUSERS")]
public partial class AcctUser
{
...
和
[Table("NGUSERS")]
public partial class PmsUser
{
...
它们各自拥有各自不同数据库的连接字符串。我需要做些什么才能让它允许相同的表名(修改数据库不是一个选项)?
答案 0 :(得分:1)
使用两个ModelBuilder而不是属性。然后将创建的DbModel
传递给DbConnection
。或者在DbContext中设置数据库名称。请参阅Entity Framework Connections and Models。
此基类有助于使用DbContext注册模型构建器:
public abstract class ModelBuilderBase {
protected readonly DbModelBuilder ModelBuilder;
protected ModelBuilderBase(DbModelBuilder modelBuilder) {
ModelBuilder = modelBuilder;
}
public abstract void BuildModel();
}
模型构建器实现:
public class ModelBuilder1 : ModelBuilderBase {
public ModelBuilder1 (DbModelBuilder modelBuilder) : base(modelBuilder)
{ }
public override void BuildModel() {
ModelBuilder.Entity<AcctUser>().ToTable("NGUSERS");
}
}
的DbContext:
public class DbContext1 : DbContext {
public DbContext1() : base("Database1") /* set DB name */ {
}
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
var modelBuilders = new List<ModelBuilderBase> {
new ModelBuilder1(modelBuilder)
};
modelBuilders.ToList().ForEach(x => x.BuildModel());
}
}
为第二个DB / Table创建ModelBuilder2和DbContext2。