用户拥有系统角色——如何(对象)建模三元关系?我有以下实体:特权(Id,名称)角色(Id,名称,ICollection)系统(Id,名称)用户(Id,名称,通行证,?)现在我想建模“用户可能有零个或多个每个系统中的零个或多个角色”,例如:IDictionarySystemRoles{get;放;这可能使用ASP.NETEntityFramework吗?如果是,如何?我必须设置哪些属性?现在已经找了一段时间了,但我还没有在网上找到任何对“实体框架代码优先三元关系”有用的东西。你能给我指一些好的链接吗?或者也许给我一个提示如何建模/我可以把哪些属性放在字典中?附加问题:如果IDictionary解决方案以某种方式工作,是否有任何更改以获得更改跟踪代理性能?IDictionary不是ICollection...对于零个或多个系统中的每一个,用户可以拥有零个或多个角色您将需要一个描述三者之间关系的实体:publicclassUserSystemRole{publicintUserId{get;放;}publicintSystemId{得到;放;}publicintRoleId{得到;放;}公共用户用户{得到;放;}公共系统系统{get;放;}公共角色角色{get;三个属性创建一个复合主键,因为每个组合可能只出现一次并且必须是唯一的。键的每个部分都是相应导航属性用户、系统和角色的外键。然后其他实体将有引用这个“链接实体”的集合:publicclassUser{publicintUserId{get;放;}//...publicICollectionUserSystemRoles{get;放;}}publicclassSystem{publicintSystemId{get;放;}//...publicICollectionUserSystemRoles{get;放;}}publicclassRole{publicintRoleId{get;放;}//...publicICollectionUserSystemRoles{get;放;}}然后使用FluentAPI进行映射将如下所示:modelBuilder.Entity().HasKey(usr=>new{usr.UserId,usr.SystemId,usr.RoleId});modelBuilder.Entity().HasRequired(usr=>usr.User).WithMany(u=>u.UserSystemRoles).HasForeignKey(usr=>usr.UserId);modelBuilder.Entity().HasRequired(usr=>usr.System).WithMany(s=>s.UserSystemRoles).HasForeignKey(usr=>usr.SystemId);modelBuilder.Entity().HasRequired(usr=>usr.Role).WithMany(r=>r.UserSystemRoles).HasForeignKey(usr=>usr.RoleId);如果不需要,可以删除集合属性之一(使用不带参数的WithMany())。编辑为了获得用户字典,您可以引入一个辅助属性(只读且未映射到数据库),如下所示:publicclassUser{publicintUserId{get;放;}//...publicICollectionUserSystemRoles{get;放;}publicIDictionary>SystemRoles{get{returnUserSystemRoles.GroupBy(usr=>usr.System).ToDictionary(g=>g.Key,g=>g.Select(usr=>usr.Role));}}}请注意,您需要加载UserSystemRoles属性才能访问此字典。或者将UserSystemRoles属性标记为虚拟以启用延迟加载。以上是C#学习教程:用户拥有系统角色——如何(对象)建模三元关系?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: