我有一个数据库 (MS SQL Server),其中表使用了行级安全性。如果我想将它与实体框架一起使用会不会有任何并发症。例如,假设我在学生和课程之间有 n:n 关系,如下所示:
Student:
Bob
Alice
Course:
Math
History
Student_Course:
Bob | Math
Bob | History
Alice | Math
Alice | History
“课程”表具有行级访问权限,我不能看到“历史”行。那么,如果我从“Student”表中获取 Bob 然后执行以下操作,会发生什么:
var bobsCourses = bobTheStudent.Courses
数据库已经存在但应用程序不存在,所以这是“数据库优先” 该应用程序将仅用于数据呈现,因此无需关心向数据库写入任何更新。
答案 0 :(得分:0)
除非您将 RLS 谓词也应用于 Student_Course 表,否则它可能会中断。 RLS 在 SQL Server 中不会“级联”。
答案 1 :(得分:0)
我做了一些测试,它似乎是这样工作的: 对于 n:n 关系没有问题,该示例工作正常,结果将是 [Math]。 对于 1:1 关系,它有点复杂,例如假设我们有这些表:
Student: ### Table with students + main subject foreign key
Bob | Math
Alice | History
Subject: ### Subjects
Math ### This row is private
History
那么:
AllStudents
会给我 [鲍勃,爱丽丝] 和
BobTheStudent.MainSubject
将简单地为空。 但接下来是可怕的事情......
AllStudents.Include("MainSubject")
会给我[爱丽丝]。 我想那是因为在这种情况下,将使用 SQL 内部联接从两个表中检索数据。 (如果外键允许空值,可能会有所不同,但我没有测试。)