2011-05-22 73 views
0

这里是场景:在.net codefirst中我可以动态创建类吗?

我正在写一个数据加载器,它接受来自某些DB2目录表的二进制数据。我为DB2表结构创建了POCO,并在将数据加载到其中之前使用Code First创建SQLServer DB。我首先使用代码并为每个数据集创建新数据库的原因之一是,我正在处理不同版本的DB2,它们添加了列,这些列在版本之间移动位置甚至删除列。

在开发过程中,我根据我的数据来自哪个版本的DB2,评论和取消注释不同版本的POCO。但是现在我想要有一个通用版本。一个显而易见的解决方案是根据DB2版本对这些POCO进行一系列的修复,以及一组DBContext类。这将需要使用DBContext的代码的全新级别的复杂性。

那么有没有一种方法可以根据DB2版本动态生成POCO,然后让CodeFirst从中获取?

+0

如果可以,你会如何消耗这些物体?显然,如果它们在编译时不存在,则无法对它们进行编码。你准备使用反射,只是对他们进行数据绑定(反射)? – 2011-05-22 18:16:10

+0

我想要做的是让他们在适当的结构中创建数据库,并且还用于根据POCO结构动态构建数据集的数据加载器。 – GilShalit 2011-05-23 18:30:17

回答

0

如果我理解正确,您试图从不同的模式获取来自不同DB2数据库的数据,但希望将其加载到单个SQL Server模式中?

你可以考虑使用映射文件。下面的示例假定您有两个源DB2模式(“Schema1”和“Schema2”)和一个目标SQL模式。有一个类型(“Entity1”),但是两个POCO分别代表两个DB2模式(“Entity1FromSchema1”和“Entity1FromSchema2”)。

public class Entity1FromSchema1Mapping : EntityTypeConfiguration<Entity1FromSchema1> 
{ 
    public Entity1FromSchema1Mapping() 
    { 
     this.ToTable("Entity1"); 
     this.HasKey(...); 
     this.Property(...); 
     ...    
    } 
} 

public class Entity1FromSchema2Mapping : EntityTypeConfiguration<Entity1FromSchema2> 
{ 
    public Entity1FromSchema2Mapping() 
    { 
     this.ToTable("Entity1"); 
     this.HasKey(...); 
     this.Property(...); 
     ...    
    } 
} 

注意两个不同实体的映射文件都映射到同一个SQL Server表。

相关问题