6

Fluent NHibernateでは、マッピングのカスケード設定を設定できます。EF CTP5 Fluent APIと1対多のリレーションシップでカスケード削除を切り替える方法

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の "コードファースト"でどのように行われますか?

答えて

14

モデルに1対多のリレーションシップがある場合、EFコードでは最初にカスケード削除をデフォルトの規則で有効にします。だから特別なことをする必要はありませんが、規約を無効にしてカスケード削除を切替えたいというシナリオを考えてみましょう。これは、それがEF CTP5今日以前に付属の流暢APIによって行われます方法です:

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

おかげモルテザ、ちょうど、ハッピーコード-Firsting – merbla

+1

ポストに何の問題自分を見ていない:) –

関連する問題