Используя EF6 для сервера SQL, при сохранении записи с отношением один к нулю или единице необходимо настроить сопоставления для того, чтобы идентификатор «Один» был установлен в «ноль».-or-one "
Простым случаем для этого может быть:
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
public virtual Car Car { get; set; }
}
public class Car
{
public int CarId { get; set; }
public string Make { get; set; }
public int? PersonId { get; set; }
public virtual Person Person { get; set; }
}
С конфигурациями сопоставления
public class PersonMap : EntityTypeConfiguration<Person>
{
public PersonMap()
{
HasKey(x => x.PersonId);
HasOptional(x => x.Car)
.WithRequired(x => x.Person);
}
}
public class CarMap : EntityTypeConfiguration<Car>
{
public CarMap()
{
HasKey(x => x.CarId);
Property(x => x.Make).IsRequired();
HasRequired(x => x.Person)
.WithOptional(x => x.Car);
}
}
Выполнение очень простого теста на любые измененияПриведенные выше сопоставления всегда приводят к тому, что объект Car
имеет PersonId
из null
[TestFixture]
public class PersonMappingTest
{
[Test]
public void ItWorks()
{
var person = new Person {Name = "Test person"};
var car = new Car {Person = person, Make = "Ford"};
person.Car = car;
car.Person = person;
using (var cx = new CompWalkContext())
{
cx.Persons.Add(person);
cx.SaveChanges();
}
}
}
-
CarId Make PersonId
----- ---- --------
1 Ford NULL
2 Ford NULL
Возможно ли это, или для этого необходим объект Person
быть сохраненным до добавления Car
?