将实体框架代码映射到动态命名表

时间:2013-06-11 14:39:18

标签: entity-framework entity-framework-5 code-first ef-migrations

我目前正在使用旧数据库的项目中使用EF5。遗留应用程序使用动态构建表(xxxx_year,yyyy_year)来存储“基于年份的数据”。我一直试图找到一种方法来动态地将ef实体(xxxx,yyyy等)映射到表格,基于年份属性值,但我总是得到“支持上下文的模型已经改变,因为数据库已创建。“错误。谁能给我一些关于如何实现这一目标的想法?

我发现一些旧的博客文章谈论edm映射,我们可以根据某些属性值(水平分区的类型)分离映射表,但我找不到任何关于如何使用代码完成相同的指针。

谢谢,P

1 个答案:

答案 0 :(得分:0)

在每个域对象的映射配置中,您可以告诉EF实体的相应表名与实体名本身不同。

如果您的类名为YyyyYear,则可以通过在其映射文件中指定名称来指向名为“2012_year”的表。

e.g。

// 1 entity class per db table
public class YyyyYear
{
  public int Id { get; set; }
}

// 1 mapping file for entity
using System.Data.Entity.ModelConfiguration;
public class YyyyYearMap: EntityTypeConfiguration
{
  public YyyyYearMap()
  {
    this.HasKey(t => t.Id); 
    this.ToTable("2012_year");
  }
}

// your db context class (derives from DbContext)
using System.Data.Entity;
public class MyDbContext: DbContext
{
  // 1 db set for every entity/table
  public DbSet YyyyYears { get; set; }

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    // 1 mapping file for every entity/table
    modelBuilder.Configurations.Add(new YyyyYearMap());
  }
}

我不确定这是不是您正在寻找的内容,但我有一篇博客文章,其中包含分步说明,工作示例以及如何解决常见问题。

http://wakeupandcode.com/entity-framework-code-first-migrations/

希望这有帮助!