我有一个带关联表的关系模型。但除了相关的键,这个表还有一个标志。我想定义两个关联:一个是标志为真,另一个是假。 EF设计人员可以向实体添加条件,但不能为关联添加条件。
关联表如下所示:
UserPrivilege
-------------
UserId int (FK1)
PrivilegeId int (FK2)
IsGranted bit
我想在User实体和Privilege实体之间创建两个关联:PrivilegesGranted和PrivilegesDenied。
答案 0 :(得分:2)
您无法直接通过设计师执行此操作。
但是使用DefiningQuery和Create and Delete sprocs可以在XML中实现。请参阅我的博客上的这篇旧帖子了解更多信息:Associations with Payloads。
唯一有趣的是我假设PK只是UserId和PrivilegeId,这意味着用户不能同时被授予和拒绝特定权限。
所以如果你写这样的代码:
Privilege p = user.Granted.First();
user.Granted.Remove(p);
user.Denied.Add(p);
ctx.SaveChanges();
更新订购非常重要。因为您正在为两个关联使用DefiningQuery,所以EF不知道它们是相关的,并且它需要在执行更新之前执行删除。
所以你最终可能会违反PK。
解决此问题的方法是在每个关联的Insert和Delete sprocs中,基本上可以让它们更改User和Privilege对的当前行,如果存在则使用正确的IsGranted值更新它,如果不是,则创建它它,即使它成为一个upsert。
让我知道你怎么去这里
亚历