Как отключить каскадное удаление в отношении «один ко многим» с помощью 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»?


person merbla    schedule 08.12.2010    source источник


Ответы (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);
    }
}
person Morteza Manavi    schedule 08.12.2010
comment
Спасибо, Мортеза, только что сам увидел пост - person merbla; 09.12.2010
comment
Нет проблем, Happy Code-Firsting :) - person Morteza Manavi; 09.12.2010