C# 如何在多对多关系表中将默认角色分配给用户,而不将该角色作为新角色添加到角色表中

C# 如何在多对多关系表中将默认角色分配给用户,而不将该角色作为新角色添加到角色表中,c#,entity-framework,model-view-controller,ef-code-first,C#,Entity Framework,Model View Controller,Ef Code First,我还在学习编码,这是我的第一个问题。任何有助于表达得更好或添加遗漏的内容都将不胜感激 我有一个表用户(名称、姓氏…)和一个表角色(名称、描述…)。多对多关系表UserRole连接它们的ID registeredUser.Roles.Add(DefaultDataProvider.Roles[RoleName.Guest]); await dataRepository.CreateAsync(registeredUser); await bridgeRepository.CreateAsync

我还在学习编码,这是我的第一个问题。任何有助于表达得更好或添加遗漏的内容都将不胜感激

我有一个表用户(名称、姓氏…)和一个表角色(名称、描述…)。多对多关系表UserRole连接它们的ID

registeredUser.Roles.Add(DefaultDataProvider.Roles[RoleName.Guest]);
await dataRepository.CreateAsync(registeredUser);  
await bridgeRepository.CreateAsync(registeredUser);
当用户注册时,会为其分配一个默认角色“来宾”。但是,在注册时,程序试图向表中添加一个新角色“Guest”,并抛出一个异常,因为它已经存在

我想让它先检查它是否存在,然后再通过手动创建关系表将其添加到角色表中,但是我有两个表UserRole,一个是我编写的,另一个是通过迁移生成的。因此,我试图通过添加
[NotMapped]
注释,并使用Fluent API的忽略方法(而不是同时)。两者都不起作用并引发异常:
“ExceptionMessage”:“指定的包含路径无效。EntityType“User”未声明名为“Role”的导航属性。”

我知道Attach方法,但我不能使用它,因为我需要使用第三方dll来管理数据,而且我只能访问db结构

我的主要目标是将默认角色分配给新用户,而程序不会像添加新角色一样尝试添加该角色。



我正在使用EF 6.2.0。

我将首先使用新方法查找角色实体:

var role = roleRepository.GetRoleByName(RoleName.Guest)
然后将其添加到导航道具中:

registeredUser.Roles.Add(role);

完全是伪代码,但我希望你能理解?关键是首先找到角色对象的引用并将其映射到Person。

谢谢您的建议。我正在尝试你的解决方案,但我遇到了另一个相关的问题。一旦我解决了这个问题,我想这会奏效的。