Все возможности изменить модель базы данных с Fluent API, которые я нашел до сих пор, предполагают, что свойство, которое я хочу редактировать, также является свойством в сущности. Но я не знаю, как изменить атрибуты свойства, которое не является свойством в классе сущности.
Пример:
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Address> Addresses { get; set; }
public Person()
{
this.Addresses = new List<Address>();
}
}
public class Address
{
public int AddressId { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
Теперь Code First создает базу данных, в которой таблица Addresses имеет PersonId как FK, поэтому имеет отношение 1 к * (что я хочу). Но FK PersonId in Addresses имеет значение NULL, и я не могу получить доступ к этому FK в Fluent API, поскольку нет свойства. Как я могу изменить этот FK на непустую?
Кроме того, в тот момент, когда я хочу удалить Person, EF не позволяет мне делать это, поскольку есть связанный адрес. Я думал, что это поведение:
Это неправильно?
Следующая директива Fluent API сделала это для меня, поэтому для достижения
следующее выражение должно быть включено в OnModelCreating
modelBuilder.Entity<Person>().HasMany(a => a.Addresses).WithRequired().WillCascadeOnDelete(true);
Для начала вы должны сделать ключ с ключем по-другому.
Для второго вам придется использовать свободный API для этого.
Попробуйте добавить ниже в контекст БД
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>()
.HasOptional(a => a.Address)
.WithOptionalDependent()
.WillCascadeOnDelete(true);
}