【发布时间】:2013-11-06 14:46:04
【问题描述】:
我正在开发的一个应用程序广泛使用 Linq to EF。它是多租户的,因此不同的客户将所有数据都存储在同一个数据库中。
一些客户想要自定义报告。理想情况下,这些自定义报告的定义将针对客户存储在数据库中,因为将这些报告硬编码到主代码中是不切实际的(很快就会失控)。
我过去通过存储 SQL 字符串解决了这个问题,然后使用context.SqlQuery(myReportSQL) 对其进行评估。它工作得很好。
两个想法:
目前客户无法编辑 SQL 字符串。它在内部进行管理,以避免运行错误类型的查询。你会如何建议向客户开放这个?查询构建器界面(欢迎对插件有任何建议)?只允许 SELECT 语句的东西?
更好的方法是使用 LINQ to EF 查询,因为:确保它只是一个 SELECT 更容易,我可以在最后链接额外的 WHERE 以确保它们只获得正确的数据,并且它更具可读性。
那么对于选项 2,您如何将其存储在数据库中,然后有效地“评估”它?
我已经看到 Dynamic LINQ 库在一定程度上有所帮助,但我担心它已经过时并且可能会被丢弃/不支持 EF6 等。
【问题讨论】:
-
我想到了另一个想法:以某种 JSON 格式存储查询。有没有我应该遵循的标准?
-
关于 1. 如果您向客户开放它,那么您将保护谁来保护客户不获取其他客户的数据?关于 2. 客户如何构建 LINQ 运行时?
-
1.正是 - 这就是它的问题!必须非常仔细地解析/检查它。完全不热衷于此。一种解决方案是让他们从只包含他们被允许查看的数据的预定义查询中进行查询。
-
还有 2 - 好吧,我想这是不可能的。因此我的问题在这里。也许我追求的是一种在内部解析的 linq 风格的语法。
-
我不敢相信我会这么说 - 但你考虑过 Entity-SQL 吗?msdn.microsoft.com/en-us/library/bb399560.aspx
标签: c# .net asp.net-mvc entity-framework linq-to-entities