EF代码优先,Db所有者
本文关键字:Db 所有者 代码 EF | 更新日期: 2023-09-27 17:49:16
我有一个问题,可能是简单的,但我找不到任何关于它。
我在遗留数据库上使用EF 4.1 Code First。在我们的开发环境中,所有表的所有者都是dbo,但是在生产环境中,有些表的所有者是另一个用户,比如myuser。
我用方法"ToTable"映射我的对象,只指定表名而不指定所有者。这样,EF会自动尝试执行[dbo]。[TableName]在生产环境中抛出无效的对象名错误,因为表是[myuser].[TableName]
是否有一种方法告诉EF在映射表时忽略db所有者?我不能在生产环境中更改所有者,并且由于其他原因,我不能在开发数据库中复制生产配置。
谢谢。
可以在运行时设置模式。
public class YourDbContext : DbContext
{
public IDbSet<SomeObject> SomeObjects { get; set; }
public IDbSet<SomeOtherObject> SomeOtherObjects { get; set; }
public IDbSet<YetAnotherObject> YetMoreObjects { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new RuntimeSchemaConfiguration<SomeObject>());
modelBuilder.Configurations.Add(new RuntimeSchemaConfiguration<SomeOtherObject>());
modelBuilder.Configurations.Add(new RuntimeSchemaConfiguration<YetAnotherObject>());
}
private class RuntimeSchemaConfiguration<T> : EntityTypeConfiguration<T>
where T : class
{
public RuntimeSchemaConfiguration()
{
// Rename the schema based on a string
// from a config file or other source
var schemaName = GetSchemaNameFromConfigFile();
ToTable(typeof(T).Name, schemaName);
}
}
}