Как отключить каскадное удаление в отношениях один ко многим с 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 "сначала код"?
1 ответов
Если у вас есть отношение один ко многим в вашей модели, код EF сначала включит каскадное удаление по соглашение по умолчанию. Поэтому вам не нужно делать ничего особенного, но давайте рассмотрим сценарий, который вы хотите переопределить соглашение и отключить cascade delete. Вот как это делается с помощью 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);
}
}