Entity framework 首先将实体框架代码映射到动态命名表

Entity framework 首先将实体框架代码映射到动态命名表,entity-framework,entity-framework-5,code-first,entity-framework-migrations,Entity Framework,Entity Framework 5,Code First,Entity Framework Migrations,我目前正在一个遗留数据库项目中使用EF5。遗留应用程序使用动态生成表(xxxx年、yyyy年)来存储“基于年份的数据”。我一直在试图找到一种方法,根据year属性值,将ef实体(xxxx、yyyy等)动态映射到表中,但我总是得到“支持上下文的模型自数据库创建以来已更改。”错误。有谁能给我一些关于如何做到这一点的想法吗 我发现一些关于edm映射的老博文,其中我们可以根据一些属性值(类似于水平分区)分离映射表,但我找不到任何关于如何首先使用代码实现相同操作的指针 谢谢,p在每个域对象的映射配置中,您

我目前正在一个遗留数据库项目中使用EF5。遗留应用程序使用动态生成表(xxxx年、yyyy年)来存储“基于年份的数据”。我一直在试图找到一种方法,根据year属性值,将ef实体(xxxx、yyyy等)动态映射到表中,但我总是得到“支持上下文的模型自数据库创建以来已更改。”错误。有谁能给我一些关于如何做到这一点的想法吗

我发现一些关于edm映射的老博文,其中我们可以根据一些属性值(类似于水平分区)分离映射表,但我找不到任何关于如何首先使用代码实现相同操作的指针


谢谢,p

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

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

e、 g

//每个db表1个实体类 公共类YYYYEAR { 公共int Id{get;set;} } //1实体的映射文件 使用System.Data.Entity.ModelConfiguration; 公共类YYYYEARMAP:EntityTypeConfiguration { 公共YYYYEARMAP() { this.HasKey(t=>t.Id); 本表为可转帐(“2012年”); } } //数据库上下文类(从DbContext派生) 使用System.Data.Entity; 公共类MyDbContext:DbContext { //为每个实体/表格设置1 db 公共数据库集YYYYEARS{get;set;} 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder) { //每个实体/表1个映射文件 modelBuilder.Configurations.Add(新的YYYYEARMAP()); } } 我不确定这是否是你想要的,但我有一篇博客文章,里面有一步一步的说明,一个工作示例,以及如何解决常见问题


希望这有帮助

什么是数据库平台?我使用的是sql server 2008 r2Hi,很抱歉回答得太晚。我设法用另一种方法解决了这个问题(合并“前几年”将表划分为一个称为xxxhistory的大表,并在Sql Server中对其进行分区。唯一的缺点是,我总是使用当前年份+历史模型。您的解决方案可以工作,但在我看来,它需要每年创建一个新映射,这是不可能的:-) // 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()); } }