在.net代码中我首先可以动态创建类吗?

时间:2011-05-22 17:47:49

标签: .net code-generation mef ef-code-first code-first

以下是该方案:

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

在开发过程中,我会评论和取消注释不同版本的POCO,具体取决于我的数据来自哪个版本的DB2。但现在我想要一个通用版本。一个明显的解决方案是根据DB2版本以及一组DBContext类,让这些POCO的集合在其名称上进行后置修复。这将需要使用DBContext的代码的全新复杂程度。

那么有没有办法根据DB2版本动态生成POCO,然后让CodeFirst从那里获取它?

1 个答案:

答案 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表。