我有一个可能很简单但我找不到任何问题的问题。
我在遗留数据库上使用EF 4.1 Code First。在我们的开发环境中,所有表都在“dbo”所有者下,但在生产中有些是在另一个用户之下,让我们说“myuser”。
我使用方法“ToTable”映射我的对象,只指定没有所有者的表名。这样,EF会自动尝试继续[dbo]。[TableName]并在生产中抛出无效的对象名称错误,因为该表是[myuser]。[TableName]
有没有办法告诉EF在映射表时忽略db所有者?我无法在生产环境中更改所有者,并且由于其他原因我无法在我们的开发数据库中复制生产配置。
感谢。
答案 0 :(得分:1)
您可以在运行时设置架构。
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);
}
}
}