2013-06-12 15 views
0

У меня возникает следующая ошибка, когда я удаляю объект из коллекции, а затем сохраняю его. Я понимаю, что мне нужно настроить мои отношения для удаления объекта, когда отношения удалены, но я не могу точно определить, что нужно делать, несмотря на поиск через Google и SO.Правильное определение отношений для удалений в коде EF Сначала

Отношения не могут быть изменены, поскольку одно или несколько из свойств внешнего ключа не имеют значения NULL.

У меня есть три таблицы: роль, разрешение и RolePermission. Я пытаюсь удалить RolePermission из роли.

public RoleMap() 
{ 
    HasKey(t => t.Id); 
    ToTable("Role"); 
    Property(t => t.RoleName).HasColumnName("RoleName"); 

    HasMany(t => t.RolePermissions).WithRequired(t => t.Role).HasForeignKey(t => t.RoleId); 
} 

public PermissionMap() 
{ 
    HasKey(t => t.Id); 
    ToTable("Permission"); 
    Property(t => t.ApplicationId).HasColumnName("ApplicationId"); 
    Property(t => t.PermissionName).HasColumnName("PermissionName"); 
    Property(t => t.IsActive).HasColumnName("IsActive"); 

    HasRequired(t => t.Application).WithMany(t => t.Permissions).HasForeignKey(t => t.ApplicationId); 
} 

public RolePermissionMap() 
{ 
    HasKey(t => t.Id); 
    ToTable("RolePermission"); 
    Property(t => t.PermissionId).HasColumnName("PermissionId"); 
    Property(t => t.RoleId).HasColumnName("RoleId"); 

    HasRequired(t => t.Permission).WithMany(t => t.RolePermissions).HasForeignKey(t => t.PermissionId); 
    HasRequired(t => t.Role).WithMany(t => t.RolePermissions).HasForeignKey(t => t.RoleId); 
} 

Код для удаления выглядит следующим образом (все присоединенные к DbContext):

foreach (RolePermission rolePermission in permissionsToRemove) 
{ 
    role.RolePermissions.Remove(rolePermission); 
} 

//call commit/saveChanges here 

Что мне нужно настроить для того, чтобы удалить его в самом деле вызвать удаление?

ответ

0

Я думаю, что вам не нужен объект RolePermission вообще, если только вы не храните дополнительную информацию в дополнение к полям внешнего ключа. Итак, постарайтесь построить отношения «многие-ко-многим» между «Роль и разрешение». Позвольте мне привести пример с моим собственным кодом:

  modelBuilder.Entity<User>() 
      .HasMany(u => u.Roles) 
      .WithMany(r => r.Users) 
      .Map(x => { 
       x.ToTable("USER_ROLE_XREF", dbsch); 
       x.MapLeftKey("ID_USER"); 
       x.MapRightKey("ID_ROLE"); 
      }); 
Смежные вопросы