2009-01-05 41 views
2

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

一)在DataContext的创建仪器和货币的实体,然后创建协会或简单地用加入LINQ查询或

二)建立在连接仪器数据库中的视图和货币(从而将currency_id解析为货币代码)并将其用作Linq上下文中的实体?

回答

1

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

+0

但性能怎么样,如果我不使用视图LINQ会做更多的选择每行? – Sasha 2009-01-05 19:07:55

+0

不一定LINQ表达式通常会解析为将在SQL中执行所需连接的单个选择。 – AnthonyWJones 2009-01-05 19:10:28

0

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

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

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

  • 如果使用联接发出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;