Как сделать так, чтобы связь «1 к 1» работала правильно в Entity Framework? - PullRequest
1 голос
/ 03 октября 2009

У меня есть объекты: тип A (идентификатор, имя), тип B (AId, описание).

Я хочу сделать отношение 1-к-1 (и создать его 1-к- [0..1]). Все отлично работает, кроме удаления объектов типа А. При попытке удалить какой-либо объект из типа А. возникает исключение.

Отношение добавляется или удаляется из набора ассоциаций ‘...’. С ограничениями по количеству элементов, также необходимо добавить или удалить соответствующий «...».

Я искал решение (нашел редактирование CSDL для многих ко многим), но ничего не помогает. В базе данных также определено каскадное действие.

Есть предложения?

UPD: Спасибо за ответы. Скажем более ясно.

  1. Я не хочу реализовывать наследование между A и B

  2. Я пытаюсь исправить проблему, отредактировав файл edmx (например, http://codepolice.net/2008/12/16/cascade-delete-in-entity-framework/),, но не повезло. Кажется, он работает только для одного ко многим.

  3. Я просто хочу иметь 2 объекта с отношением один к одному. Например, Order и OrderDetails. Я ожидал автоматического создания / удаления OrderDetails для каждого моего заказа.

Ответы [ 4 ]

1 голос
/ 04 октября 2009

1: 1 должно дать исключение, если вы удаляете B правильно?

Я думаю, что вы хотите, 0..1

Щелкните правой кнопкой мыши Добавить-> Ассоциации.

при кратности: С левой стороны выберите One для A и 0 или 1 справа для B. Я думаю, что вам это нужно, если вы хотите дополнительный объект описания (B) для A.

Вы могли бы также переместить поля B в A и проверить не ноль для этих полей, верно? Это может быть проще, тогда я думаю, что вы могли бы просто использовать поля А.

Кроме того, я давно не дизайнер баз данных, но разве вам не нужны данные A в A?

Если, например, у вас есть «Персона» и его «Дом», я думаю, что это было бы хорошим вариантом для 1: 1 (или 0..1 реального мира), потому что они сами являются 2 различными объектами, которые другие объекты может поделиться самостоятельно.

Похоже, объекты A_DataObject просто приводят к ненужному объединению?

Старый ответ ниже (не ищет наследства, а уходит за кем-то еще): ОК, думаю, я столкнулся с этим сегодня. Я думаю, что вы можете захотеть сделать, это определить 2 класса как подклассы базового класса (сущности). Щелкните правой кнопкой мыши и добавьте -> наследование, чтобы начать. Я еще не все это заработал, но я думаю, что это связано с указанием поля в Base, BaseType, которое можно использовать для ввода в производные классы.

http://mosesofegypt.net/post/Inheritance-and-Associations-with-Entity-Framework-Part-1.aspx

Обратите внимание, часть 2 и 3 этого.

-Давид

0 голосов
/ 06 марта 2012

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

(используется Code-First)

0 голосов
/ 04 октября 2009

Визуальный инструмент EntityFramework неправильно распознает «при каскаде удаления» и создает неполное сопоставление xml. Вы должны изменить файл EDMX (вы можете сделать это с помощью блокнота). Инструкции здесь:

http://codepolice.net/2008/12/16/cascade-delete-in-entity-framework/

работал для меня.

0 голосов
/ 04 октября 2009

Один из способов сделать это состоит в том, чтобы иметь один объект, который отображается на 2 таблицы. См:

http://msdn.microsoft.com/en-us/library/bb896233.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...