以下是该方案:
我正在编写一个数据加载器,它接受来自某些DB2目录表的二进制数据。我为DB2表结构创建了POCO,并在将数据加载到SQLServer DB之前使用Code First创建SQLServer DB。我首先使用代码并为每个数据集创建新数据库的原因之一是,我正在处理不同版本的DB2,这些版本在版本之间添加了列,列移动位置甚至删除了列。
在开发过程中,我会评论和取消注释不同版本的POCO,具体取决于我的数据来自哪个版本的DB2。但现在我想要一个通用版本。一个明显的解决方案是根据DB2版本以及一组DBContext类,让这些POCO的集合在其名称上进行后置修复。这将需要使用DBContext的代码的全新复杂程度。
那么有没有办法根据DB2版本动态生成POCO,然后让CodeFirst从那里获取它?
答案 0 :(得分: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表。