В .net codefirst я могу создавать классы динамически? - PullRequest
0 голосов
/ 22 мая 2011

Вот сценарий:

Я пишу загрузчик данных, который принимает двоичные данные из определенных таблиц каталога DB2.Я создал POCO для структур таблиц DB2 и использую Code First для создания базы данных SQLServer непосредственно перед загрузкой в ​​нее данных.Одна из причин, по которой я сначала использую код и создаю новую БД для каждого набора данных, заключается в том, что я имею дело с разными версиями DB2, в которых между версиями добавлены столбцы, столбцы, которые перемещают местоположения, и даже отброшенные столбцы.

Во время разработки я комментирую и раскомментирую разные версии POCO в зависимости от того, из какой версии DB2 поступили мои данные.Но теперь я хочу иметь версию общего назначения.Одним из очевидных решений было бы иметь наборы этих POCO с последующим исправлением их имени в соответствии с версией DB2, а также набор классов DBContext.Это потребует совершенно нового уровня сложности в коде, который использует DBContext.

Итак, есть ли способ динамически генерировать POCO в соответствии с версией DB2, а затем заставить CodeFirst взять его оттуда?

1 Ответ

0 голосов
/ 10 августа 2012

Если я правильно понимаю, вы пытаетесь получить данные из разных баз данных DB2 с несколько разными схемами, но хотите загрузить их в одну схему SQL Server?

Вы можете рассмотреть возможность использования файла сопоставления. В приведенном ниже примере предполагается, что у вас есть две исходные схемы DB2 («Схема1» и «Схема2») и одна схема назначения 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.

...