我有一个包含非常大表的数据库(其中一些可能有超过 1,000,000 条记录),并且该数据库的每个用户都应该看到其中的一些数据,因此我们有多个 TVF(表值函数),它们获取用户 ID 并选择那些该用户可见的表的记录(此操作需要多个SELECT
语句,我认为调用 TVF 比在代码中实现它要好得多)。在向我的客户发布的程序的第一个版本中,我有一个具有多个类型属性的类IQueryable
,它使用 LinqToSql 实现并且效果很好。现在我有一个客户想要使用我的程序集来编写 WCF 数据服务,所以我必须编写一个派生自DbContext
(使用 EF)的类,该类可以在指定的服务中使用。我的问题是:
DbContext
自动公开DbSet
其中定义的所有属性,因此每个具有最低访问级别的用户都可以查看表的整个数据(当然客户端应用程序会限制数据,但客户端可以直接访问数据,甚至可以使用将这些数据导入 Excel 或 Access数据)我有多个类型的公共属性,
IQueryable
但它们不会出现在 WCF 数据服务公开的数据列表中。
为了解决这个问题,我认为最完整的解决方案是能够将 TVF 称为表并从中创建一个集合。但是我不知道该怎么做?!
注意 对数据库的任何更改都需要一些日志记录,因此我有存储过程来执行这些更改,因此我只需要对我的 WCF 数据服务的只读访问权限,并且我不希望包含在服务