Linq与数据库视图

时间:2009-01-05 18:57:32

标签: database linq performance views

这是一个有趣的问题。假设我们在数据库中有相关的表,例如,工具和货币。 Instrument表有一个currency_id字段,该字段映射到Currency表中的条目。在Linq土地上有什么更好的方式:

a)在DataContext中创建工具和货币实体,然后创建关联或简单地在Linq查询中使用连接或

b)在数据库中创建一个连接工具和货币的视图(从而将currency_id解析为货币代码)并将其用作Linq上下文中的实体?

4 个答案:

答案 0 :(得分:1)

你会独立使用它们吗?如果是这样,您将需要为每个将独立使用的实体。我怀疑您将独立使用货币(例如,下拉菜单允许您在创建工具时选择货币)。在这种情况下,我认为将它们分开并建立联系会更容易。

答案 1 :(得分:0)

随着ORM现在抽象数据访问逻辑,不再需要特定的视图功能。最好将它留给ORM,因为它是其功能的一部分。

但是,视图可能仍然有助于简化存储过程代码,甚至可用于创建有用的索引。

答案 2 :(得分:0)

  • 如果您在乐器中加载并稍后使用Currencies属性加载相关货币,则会有两个查询。

  • 如果您使用连接发出linq查询,linq会使用连接将其转换为sql并立即获取所有数据。

  • 如果您设置了DataLoadOptions,则可以在一个查询中获取所有数据,而无需编写连接。

http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.aspx http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.loadwith.aspx

DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Instrument>(i => i.Currencies)
myDataContext.LoadOptions = dlo;

答案 3 :(得分:-1)

我发现LINQ具有气质。我可以每隔1分钟运行一次相同的查询,并获得不同的结果。注意我正在使用本地数据库,因此我知道数据没有更改。在我看来,将视图与数据集结合使用会更加可靠,尤其是对于联接。