如何使用EF CTP5 Fluent API在一对多关系中关闭级联删除

6
在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个回答

14

如果您的模型中存在一对多关系,EF Code First将启用默认约定进行级联删除。因此,您不需要做任何特殊处理,但是假设您想要覆盖该约定并关闭级联删除,那么使用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);
    }
}

1
谢谢Morteza,我也刚看到这篇帖子。 - merbla
1
没问题,愉快的 Code-Firsting :) - Morteza Manavi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接