EF: как мне моделировать 1: 1 без ссылочной целостности БД? - PullRequest
0 голосов
/ 10 ноября 2011

Рассмотрим следующие таблицы:

Base, Primary key: Id
Extension, Primary key: Id

Первичный ключ в таблице «Extension» имеет то же значение, что и первичный ключ в таблице «Base».Я хочу смоделировать это в edmx следующим образом:

База может иметь 0..1 (ноль или один) экземпляры расширения.

Расширение может иметь 1 (один) экземплярбазы.Используйте Extension.Base для доступа к экземпляру Base.

Когда я пытаюсь указать детали отображения для этой ассоциации, я получаю ошибку, такую ​​как:

"Ошибка 3021: проблема в отображении фрагментов, начинающихся со строки xx: Каждый из следующих столбцов в таблице Base сопоставлен с несколькими концептуальными свойствами стороны: Base.ID сопоставлен с "

Как мне смоделировать отношение 1: 0..1, которое не поддерживаетсясвязь с базой данных?Я в основном хочу отношения, чтобы я мог запросить мою модель чтения, используя Linq.

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

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

По сути, я создал промежуточную таблицу с двумя столбцами,оба целых, 1 содержали идентификатор из одной таблицы, а другой - из другой таблицы, что позволило мне соединить их вместе.

так EG:

--------------------------
| Base ID | Extension ID |
--------------------------

Я сделалЯ должен управлять таблицей вручную, поэтому немного дополнительной работы, но она сделала свое дело.

Может быть, не та схема, которая вам нужна, но я думаю, что промежуточная таблица, независимо от вашей схемы, является разумным способом рассмотренияудовлетворение ваших потребностей.

0 голосов
/ 10 ноября 2011

Вы должны изменить классы вашего режима, например, следующие для отношения 1: 1: -

Базовый класс

public class Base
{
    public int BaseID;
    public int ExtentionID;
    public virtual Extention Extension { get; set; }
}

Класс расширения

public class Extention
{
    public int ExtentionID;
    public int BaseID;
    public Base Base { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...