数据过滤的设计模式

时间:2011-09-04 09:44:10

标签: c# asp.net design-patterns

在动态条件下是否有任何数据过滤设计模式。 我正在为我的客户共享Web应用程序页面和相同的DataBase和相同的表。 例如,我不希望公司A的客户看到公司B的订单,因此过滤条件在公司字段上完成。 对于其他页面,可以在更多字段上完成过滤。 我正在使用存储过程或sql文本来获取数据。

我更喜欢数据过滤将由sql server完成。

3 个答案:

答案 0 :(得分:2)

我认为将业务逻辑存储在sql server端并不是最好的选择。 SQL中的过滤数据使您的存储过程/模式设计更加复杂。

使用一些ORM(Linq,HNibernate等)框架进行动态过滤会简单得多。 当然很难在不知道项目具体情况的情况下推荐一些东西,但我会选择提供灵活数据查询的LINQ。

答案 1 :(得分:0)

company_id传递给应用程序中的存储过程吗?

create stored procedure GetOrders(@customer_id int)
as
select * from Orders
where company_id = @customer_id;

我忘记了存储过程的确切语法(呃!),但这个想法很合理。当然,除非你的意思完全不同。

答案 2 :(得分:0)

你想要的基本上是Isolation

要实现这一目标,您可以遵循以下几条规则:

  1. 在DB StoredProcedures / Views或代码中声明您的查询始终由CompanyName进行参数化。在这种情况下,如果不指定公司名称,则无法调用任何数据恢复功能。
  2. 在您的查询中确保仅从DB检索CompanyName指定并链接到该数据的数据。
  3. 在UI上,CompanyName必须是您的UI界面的首要任务,并且用户必须首先声明。
  4. 像这样的事情,如果不了解项目的实际要求,很难说出更精确的内容。

    LINQ与DB有什么关系,这取决于您的规模。考虑到LINQ将比StoredProcedure或View从某个规模开始慢。但这是你必须衡量的。从舒适的角度来看LINQ自然是更优选的解决方案。