2012-12-04 2 views
54

엔티티 프레임 워크 코드 - 우선 링크 테이블에 대해 캐스케이드 삭제를 비활성화하려고합니다. 예를 들어, 많은 사용자가 많은 역할을 가지고 있고 역할을 삭제하려고 시도하는 경우에 해당 역할과 현재 연결된 사용자가없는 경우 해당 삭제가 차단되도록하려는 경우 입니다. 나는 이미 내 OnModelCreating에서 규칙을 삭제 캐스케이드를 제거 :EF 코드 우선 링크 테이블의 캐스케이드 삭제를 비활성화하는 방법은 무엇입니까?

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
    ... 
    modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 

그리고 나는 사용자 역할 링크 테이블 설정 : 아직 EF 데이터베이스를 만들 때

modelBuilder.Entity<User>() 
    .HasMany(usr => usr.Roles) 
    .WithMany(role => role.Users) 
    .Map(m => { 
     m.ToTable("UsersRoles"); 
     m.MapLeftKey("UserId"); 
     m.MapRightKey("RoleId"); 
    }); 

를, 그것의 삭제 캐스케이드를 생성 외래 키 관계.

ALTER TABLE [dbo].[UsersRoles] WITH CHECK ADD CONSTRAINT [FK_dbo.UsersRoles_dbo.User_UserId] FOREIGN KEY([UserId]) 
REFERENCES [dbo].[User] ([UserId]) 
ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[UsersRoles] WITH CHECK ADD CONSTRAINT [FK_dbo.UsersRoles_dbo.Role_RoleId] FOREIGN KEY([RoleId]) 
REFERENCES [dbo].[Role] ([RoleId]) 
ON DELETE CASCADE 
GO 

이 삭제 캐스케이드를 생성하는 EF를 어떻게 중지 할 수 있습니까?

답변

관련 문제