0

我正在做一個MVCEntity Framework 6DataBase First應用程序。MVC實體框架WillCascadeOnDelete不工作

我有兩個表.. GroupsMemberGroups,有一對多的關係。

Foreign Key can not be Null 

當我將數據庫添加到我的應用程序。該.EdmxContext.cs文件

public partial class PortalEntities : DbContext 
 
    { 
 
     public VIvaVoceEntities() 
 
      : base("name=PortalEntities") 
 
     { 
 
     } 
 
    
 
     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
 
     { 
 
      throw new UnintentionalCodeFirstException(); 
 
     } 
 
      public virtual DbSet<GroupMembers> GroupMembers { get; set; } 
 
      
 
     public virtual DbSet<Groups> Groups { get; set; } 
 
}

.tt夾它被產生的class爲每個表生成。

public partial class Groups 
 
{ 
 
    public long Group_id { get; set; } 
 
    public string Name { get; set; } 
 
    public virtual ICollection<GroupMembers> GroupMembers { get; set; } 
 
    } 
 
      
 
    public partial class GroupMembers 
 
    { 
 
     public long MemberGroup_ID { get; set; } 
 
     public long Group_id { get; set; } 
 
    }

我試圖做一個Delete on cascade ...當我刪除一個組,我想刪除所有成員該組羣。 所以在OnModelCreatingContext.cs文件我添加everthing我發現爲了刪除級聯,但沒有工作。

這是我到目前爲止嘗試過的。

modelBuilder.Entity<Groups>() 
 
      .HasMany(e => e.GroupMembers) 
 
      .WithRequired(e => e.Groups) 
 
      .WillCascadeOnDelete(true); 
 
---------------------------------   
 
      
 
modelBuilder.Entity<Groups>() 
 
    .HasOptional(x => x.GroupMembers) 
 
    .WithOptionalDependent() 
 
    .WillCascadeOnDelete(true);    
 
    
 
--------------------------------- 
 
    
 
modelBuilder.Entity<Groups>().HasMany(i => i.GroupMembers) 
 
      .WithOptional(i => i.Groups) 
 
      .HasForeignKey(i => i.Group_id) 
 
      .WillCascadeOnDelete(true);  
 

 
--------------------------------- 
 
      
 
modelBuilder.Entity<Groups>() 
 
      .HasRequired(e => e.GroupMembers) 
 
      .WithMany() 
 
      .HasForeignKey(e => e.Group_id) 
 
      .WillCascadeOnDelete(true);  

下面是我用刪除它的代碼。

var master = _db.Set<Groups>().Include(m => m.GroupMembers).SingleOrDefault(m => m.Group_id == 2); 
 
      _db.Set<Groups>().Remove(master); 
 
      _db.SaveChanges();

我有以下的錯誤...

"The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted."

看來,它不是試圖刪除子記錄。它正在嘗試更新爲空

如何正確執行此操作?

回答

0

我用這段代碼解決了。它不是我想要的級聯,但它是我找到的最好方式。

public void Delete(long Group_id) 
 
{ 
 
     Groups group = _db.Set<Groups>().Include(m => m.GroupMembers).SingleOrDefault(m => m.Group_id == Group_id); 
 
     _db.GroupMembers.RemoveRange(group.GroupMembers); 
 
     _db.SaveChanges(); 
 

 
     _db.Entry(group).State = System.Data.Entity.EntityState.Deleted; 
 
     _db.SaveChanges(); 
 
    }