2015-05-20 200 views
1

我有身份框架和自定义角色的问题。我的自定义角色包含一组活动权限。asp.net身份与自定义角色

我的自定义角色的样子

public class MyRole : IdentityRole 
{ 
    public List<MyPermission> Permissions { get; set; } 
} 

public class MyPermission 
{ 
    public int Id { get; set; } 
    public int Value { get; set; } 
} 

和RoleManager这样

public RoleManager<MyRole> MyRoleManager; 

我可以创建新的角色,但我有问题的角色更新许可。 我喜欢更新

myRole.Permissions.Clear(); 
myRole.Permissions.Add(new MyPermission() { ... }); 
MyRoleManager.Update(myRole); 

新的权限已经添加,但在数据库中的旧许可仍。我怎样才能删除那些老人。

编辑: 我刚刚注意到了更多的问题。当我使用RoleManager中的FindById时,没有来自数据库的权限加载。

谢谢。

回答

0

假设你使用代码首先,你需要添加DbSet的对上下文:

DbSet<MyRole> Roles {get;set;} 
DbSet<MyPermission> Permissions {get;set;} 

您还需要确保您的收藏标记为virtualICollection

public class MyRole : IdentityRole 
{ 
    public virtual ICollection<MyPermission> Permissions { get; set; } 
} 
+0

伟大的解决方案!它运作良好。 MyPermission现在自动加载并删除外键。然而,MyPermission记录仍然在空数据库中。请再次指导我如何删除这些东西。谢谢:) – dokibi

+0

@dokibi没问题,请接受答案,如果它的工作。 :)删除后,你可以做一个'SaveChanges()'。如果你想'Permission'也被删除,你可以设置一个级联删除,如下所示:http://stackoverflow.com/questions/17487577/entity-framework-ef-code-first-cascade-delete-for-one至零或一关系 – hutchonoid

+0

谢谢你的回复,但这次不行。在我添加.HasOptional()。WithOptionalDependent()。WillCascadeOnDelete(true);和添加迁移,EF从不存在的列生成sp_rename并且update-database显示错误参数@objname不明确或声明的@objtype(COLUMN)错误。 – dokibi