Как мне создать ассоциацию 1x0..1 в EF4 с использованием подхода Model-First? - PullRequest
0 голосов
/ 14 апреля 2011

Рассмотрим следующий пример модели:

  • Персона имеет 0..1 Пользователь
  • Пользователь имеет 1 человека

Попытка 1:

  • Я перетащил ассоциацию из Person в User на конструкторе модели.
  • Я исправил количество элементов в соответствии со своими потребностями (по умолчанию 1xN)
  • Я сгенерировал DDL из модели

Проблема:

  • Выходная таблица User имеет столбец Person_id без ограничения уникальности. То есть это не отношение 1x1, так как многие пользователи могут ссылаться на одного и того же человека. Здесь должно быть что-то не так

Попытка 2:

  • Перетянул ассоциацию из Лица в Пользователя на конструкторе модели.
  • Исправлено количество элементов в соответствии с моими потребностями (по умолчанию 1xN)
  • Выбрал ассоциацию и нажал кнопку Referential Constraint в окне свойств, чтобы редактировать ассоциацию
  • Выбранное лицо будет основным, а пользователь - зависимым
  • Выбрал Principal Key в качестве Id и Dependent Property в качестве Id (я где-то читал, что мне следует использовать один и тот же ключ для обоих типов)

Проблема:

Я запускаю этот код:

using (var context = new Locadora())
{
    User user = new User ();
    user.PasswordHash = "hash";
    user.Pessoa = new Person();
    user.Pessoa.Nome = "André";

    context.Usuários.AddObject(user);

    context.SaveChanges();
}
  • SaveChanges вызывает это исключение:

Зависимое свойство в ReferentialConstraint отображается в столбец, созданный хранилищем. Колонка: «Id»

Так что сейчас у меня нет выбора. Я не знаю, как реализовать отношения 1x1 и 1x0..1 в Entity Framework.

Как мне это сделать?

1 Ответ

1 голос
/ 14 апреля 2011

Первая попытка не может работать, потому что текущая версия EF вообще не поддерживает уникальные ключи.Второй подход не работает, поскольку у вашей зависимой сущности не может быть автоматически сгенерированного ключа = StoreGeneratedPattern должно быть установлено на None.

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