#c# #entity-framework
#c# #entity-framework
Вопрос:
Рассмотрим следующие таблицы:
Base, Primary key: Id
Extension, Primary key: Id
Первичный ключ в таблице «Extension» имеет то же значение, что и первичный ключ в таблице «Base». Я хочу смоделировать это в edmx как таковой:
База может иметь 0 .. 1 (Ноль или один) экземпляров расширения.
Расширение может иметь 1 (один) экземпляр Base. Используйте расширение.База для доступа к базовому экземпляру.
Когда я пытаюсь указать детали сопоставления для этой ассоциации, я получаю ошибку, подобную этой:
«Ошибка 3021: Проблема с отображением фрагментов, начинающихся со строки xx: каждый из следующих столбцов в таблице Base сопоставлен нескольким свойствам концептуальной стороны: Base.Идентификатор сопоставляется с «
Как я могу смоделировать связь 1: 0 .. 1, которая не поддерживается связью с базой данных? Мне в принципе нужна связь, чтобы я мог запрашивать свою модель чтения с помощью Linq.
Комментарии:
1. Entity framework сильно зависит от уровня базы данных, поэтому, чтобы это сработало, вы должны добавить отношение к базе данных. Должно быть возможно достичь этого в EF без изменений базы данных, но это работает только иногда — особенно если вы пытаетесь также изменить данные.
Ответ №1:
Если я правильно вас понял, то вы делаете что-то похожее на проблему, которую мне пришлось решать слишком долго назад в системе обмена сообщениями.
По сути, я создал промежуточную таблицу с двумя столбцами в обоих целых числах, в одном содержался идентификатор из одной таблицы, а в другом — идентификатор из другой таблицы, что затем позволило мне соединить их вместе.
итак, НАПРИМЕР:
--------------------------
| Base ID | Extension ID |
--------------------------
Однако мне пришлось управлять таблицей вручную, так что потребовалось немного дополнительной работы, но это сделало свое дело.
Возможно, это не та схема, которая вам нужна, но я думаю, что промежуточная таблица, независимо от вашей схемы, является разумным способом удовлетворения ваших потребностей.
Комментарии:
1. Это работало без ссылочной целостности в базе данных? И как вы смоделировали это в edmx?
2. Да, конечно, сделал. Я вручную создал таблицу в своей БД и сам добавил ссылки FK, затем я просто указал EF на нее и сказал ей создать модель. Поскольку в дизайне нет ничего особенного, у вас не должно возникнуть проблем с тем, чтобы сначала выполнить код или сначала модель.
Ответ №2:
Вы должны изменить свои классы режимов следующим образом для отношения 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; }
}
Комментарии:
1. Мы генерируем POCO из edmx, используя шаблон t4, поэтому меня больше интересует, как это будет выглядеть в вашем файле edmx.
2. о, черт… Я подумал, что это может вам понравиться. Поскольку это действительно отличный способ работы с таблицами и моделями. В любом случае, извините за неуместный ответ с моей стороны.
3. Я не говорю, что ваш пост не имеет значения, я просто говорю, что он очень короткий 🙂