【问题标题】:How do I map an Entity Framework Code-First model to a single SQL Server Schema?如何将实体框架代码优先模型映射到单个 SQL Server 架构?
【发布时间】:2011-06-10 15:05:00
【问题描述】:

我正在创建一个实体框架代码优先模型来针对 SQL Server 数据库执行即席查询。我的 EF 模型中没有包含来自“dbo”模式的任何表/视图;相反,我只在我的数据库中包含来自“模型”模式的表/视图。我的数据库中确实有重复的对象名称,这些名称仅由架构分隔(例如“dbo.Child”和“model.Child”)。

我是否可以在 DbContext 中指定一行,其实质上是“将此上下文中的所有实体映射到‘模型’模式”?我知道我可以将每个实体映射到正确的架构(见下文),但我想避免再次列出数据库中的每个实体。

这是我知道我能做到的:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{       
    modelBuilder.Entity<Child>().ToTable("Child", "model");
    modelBuilder.Entity<Referral>().ToTable("Referral", "model");
    // 100 lines later...
    modelBuilder.Entity<Exit>().ToTable("Exit", "model");
}

这是我想做的:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{       
    modelBuilder.Conventions.Add(new MapAllEntitiesToSchemaConvention("model"));
}

【问题讨论】:

    标签: entity-framework ef-code-first


    【解决方案1】:

    我无论如何都找不到在 EF 4.2 中开箱即用地执行此操作,但我需要我的所有实体处于不同的架构中,因此我将其破解以试图保持 DRYer。它使用与 EF 相同的底层复数引擎,并且在实体需要指定表名时进行覆盖。

    需要引用System.Data.Entity.Design

    public class BaseConfiguration<TEntityType> : EntityTypeConfiguration<TEntityType> where TEntityType : class
    {
        private readonly static PluralizationService ps = PluralizationService.CreateService(new CultureInfo("en-US"));
    
        public BaseConfiguration() : this(ps.Pluralize(typeof(TEntityType).Name)) { }
        public BaseConfiguration(string tableName) : this(tableName, MyContext.Schema) { }
        public BaseConfiguration(string tableName, string schemaName)
        {
            ToTable(tableName, schemaName);
        }
    }
    

    我通过MyContext中的常量字符串来定义模式名,即:

    public class MyContext : DbContext
    {
        public const string Schema = "my";
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new SnapshotConfiguration());
        }
    }
    

    我的实体配置如下:

    public class SnapshotConfiguration : BaseConfiguration<Snapshot>
    {
        ...
    }
    

    警告:我仍然需要在正确的架构中为我想要的每个实体进行配置 - 但它的 jist 可以在其他地方采用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多