Как сопоставить отношение «один к нулю или один» в Entity Framework 4.2, когда объединяются свойства разных типов? - PullRequest
1 голос
/ 07 февраля 2012

Я использую Entity Framework 4.2 в проекте библиотеки классов.База данных уже существует, и я никак не могу ее изменить.

У меня есть два класса модели / домена, которые моделируют две таблицы базы данных.Обе таблицы представляют значение столбца Id, которое я буду называть ThingsId.Позволяет назвать таблицы TableOfThings1 и TableOfThings2.Вот мои уроки:

public class TableOfThings1
{
    public string ThingId { get; set; }
    public virtual Thing Thing { get; set; }
}

public class TableOfThings2 //qse
{
    public Int64? ThingId {get; set;}
    public string ThingName { get; set; }
}

Проблема в том, что TableOfThings1 выставляет ThingsId как обнуляемый varchar (64), тогда как TableOfThings2 выставляет ThingsId как ненулевой bigint.

Как я могу сказать Entity Framework присоединиться к этим двум ключам?Я попытался использовать это:

HasOptional(things1 => things1.thing).WithMany().HasForeignKey(t => t.ThingId);

в EntityTypeConfiguration для TableOfThings1.

Я также попытался привести в середине этого утверждения, что не работает.Использование настройки, показанной выше, возвращает мне это сообщение об ошибке:

«Типы всех свойств в зависимой роли ссылочного ограничения должны быть такими же, как и соответствующие типы свойств в главной роли».

Кто-нибудь точно знает, возможно ли / как это возможно?

1 Ответ

1 голос
/ 07 февраля 2012

Это невозможно с EF.Вы даже не можете создать внешний ключ в базе данных, если типы столбцов отличаются.Возможный обходной путь - создать представление TableOfThings1 с типом столбца ThingId, совпадающим с типом столбца TableOfThings2 s.

...