Рассмотрим следующий пример модели:
- Персона имеет 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.
Как мне это сделать?