0

님께서는 MVCEntity Framework 6DataBase First입니다.MVC Entity Framework WillCascadeOnDelete가 작동하지 않습니다.

두 테이블이 있습니다. GroupsMemberGroups, 1 대 다수의 관계가 있습니다.

Foreign Key can not be Null 

언제 응용 프로그램에 데이터베이스를 추가합니까? .Edmx 그것은 각 테이블에 대한 class 생성 된 .tt 폴더 아래 Context.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; } 
 
}

생성됩니다.

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 파일에 내가 캐스케이드에서 삭제하기 위해 찾은 모든 것을 추가했지만 아무것도 작동하지 않습니다.

여기까지 제가 시도한 내용입니다. 여기

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."

자식 레코드를 삭제하려고하지 않는 것 같다

. Null로 업데이트하려고합니다.

올바른 방법은 무엇입니까?

답변

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(); 
 
    }