这是一个有趣的问题。假设我们在数据库中有相关的表格,例如Instrument和Currency。工具表具有映射到货币表中条目的currency_id字段。在LINQ土地有什么更好的办法:Linq与数据库视图
一)在DataContext的创建仪器和货币的实体,然后创建协会或简单地用加入LINQ查询或
二)建立在连接仪器数据库中的视图和货币(从而将currency_id解析为货币代码)并将其用作Linq上下文中的实体?
这是一个有趣的问题。假设我们在数据库中有相关的表格,例如Instrument和Currency。工具表具有映射到货币表中条目的currency_id字段。在LINQ土地有什么更好的办法:Linq与数据库视图
一)在DataContext的创建仪器和货币的实体,然后创建协会或简单地用加入LINQ查询或
二)建立在连接仪器数据库中的视图和货币(从而将currency_id解析为货币代码)并将其用作Linq上下文中的实体?
你会不会独立使用它们?如果是这样,你将需要为每个将独立使用的实体。我怀疑你会独立使用货币(比如下拉菜单允许你在创建一个工具时选择一种货币)。既然如此,我认为将它们分开并建立联系会更容易。
随着ORM现在抽象数据访问逻辑,视图的特定功能不再需要。因为这是它的一部分功能,所以最好将它留给ORM。
但是,视图对于简化存储过程代码甚至创建有用的索引仍然有用。
如果您在乐器中加载并稍后使用货币属性加载相关货币,则会出现两个查询。
如果使用联接发出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;
但性能怎么样,如果我不使用视图LINQ会做更多的选择每行? – Sasha 2009-01-05 19:07:55
不一定LINQ表达式通常会解析为将在SQL中执行所需连接的单个选择。 – AnthonyWJones 2009-01-05 19:10:28