Я тестирую Entity Framework 4 Code First (EF CodeFirst 0.8) и сталкиваюсь с проблемой с простой моделью, которая имеет отношение 1 ↔ 0..1 между Person
и Profile
. Вот как они определены:
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime? DOB { get; set; }
public virtual Profile Profile { get; set; }
}
public class Profile
{
public int ProfileId { get; set; }
public int PersonId { get; set; }
public string DisplayName { get; set; }
public virtual Person Person { get; set; }
}
Контекст DB выглядит следующим образом:
public class BodyDB : DbContext
{
public DbSet<Person> People { get; set; }
}
Я не определял DbSet
для Profile
, потому что считаю, что People
является его совокупным корнем. Когда я пытаюсь добавить новый Person
- даже один без Profile
с этим кодом:
public Person Add(Person newPerson)
{
Person person = _bodyBookEntities.People.Add(newPerson);
_bodyBookEntities.SaveChanges();
return person;
}
Я получаю следующую ошибку:
Невозможно вставить явное значение для столбца идентификации в таблицу "Люди", если для параметра IDENTITY_INSERT установлено значение "ВЫКЛ".
Объект newPerson
имеет свойство 0
для свойства PersonId
, когда я вызываю People.Add()
. Таблицы базы данных People
и Profiles
. PersonId
является PK People
и является идентификатором автоинкремента. ProfileId
является PK Profiles
и является идентификатором автоматической подстановки. PersonId
- это непустой внутренний столбец Profiles
.
Что я делаю неправильно? Я думаю, что придерживаюсь всех правил EF Code First по правилам конфигурации.