Как отключить каскадное удаление в отношениях один ко многим с помощью EF CTP5 Fluent API
В Fluent NHibernate вы можете установить настройки каскада для отображения, например
public class StoreMap : ClassMap<Store>
{
public StoreMap()
{
Id(x => x.Id);
Map(x => x.Name);
HasMany(x => x.Staff)
.Inverse()
.Cascade.None();
HasManyToMany(x => x.Products)
.Cascade.All()
.Table("StoreProduct");
}
}
Как это делается в Entity Framework "Code First"?
1 ответ:
Если у вас есть отношение один ко многим в вашей модели, EF-код сначала включит каскадное удаление по соглашениюпо умолчанию . Поэтому вам не нужно делать ничего особенного, но давайте рассмотрим сценарий, в котором вы хотите переопределить соглашение и отключить каскадное удаление. Вот как это делается с помощью Fluent API. EF CTP5 ранее сегодня:
public class Customer { public int CustomerId { get; set; } public virtual ICollection<Order> Orders { get; set; } } public class Order { public int OrderId { get; set; } public int CustomerId { get; set; } public virtual Customer Customer { get; set; } } public class StackoverflowContext : DbContext { public DbSet<Customer> Customers { get; set; } public DbSet<Order> Orders { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Customer>() .HasMany(c => c.Orders) .WithRequired(o => o.Customer) .HasForeignKey(o => o.CustomerId) .WillCascadeOnDelete(false); } }