这里有一个有趣的问题。假设数据库中有相关的表,例如 Instrument 和 Currency。Instrument 表有一个映射到 Currency 表中条目的 currency_id 字段。在 Linq 中,哪种方式更好:
a) 在数据上下文中创建Instrument和Currency实体,然后创建关联或仅使用Linq查询中的联接。
b) 创建一个视图,将Instrument和Currency连接起来(从而将currency_id解析为货币代码),并将其作为Linq上下文中的实体使用?
这里有一个有趣的问题。假设数据库中有相关的表,例如 Instrument 和 Currency。Instrument 表有一个映射到 Currency 表中条目的 currency_id 字段。在 Linq 中,哪种方式更好:
a) 在数据上下文中创建Instrument和Currency实体,然后创建关联或仅使用Linq查询中的联接。
b) 创建一个视图,将Instrument和Currency连接起来(从而将currency_id解析为货币代码),并将其作为Linq上下文中的实体使用?
你会单独使用它们吗?如果是这样,您需要为每个将单独使用的实体进行设置。我猜您会单独使用货币(例如在创建工具时选择货币的下拉列表中)。如果是这样,我认为最好将它们保持分离并建立关联。
现在ORM已经抽象出数据访问逻辑,那个视图功能就不再需要了。最好将其交给ORM,因为这是它的一部分功能。
然而,观点仍然可以用于简化存储过程代码,甚至用于创建有用的索引。
如果您加载乐器并稍后使用Currencies属性加载相关货币,那么将有两个查询。
如果你使用了一个带有Join的linq查询,linq会将其转换为带有Join的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很脾气不好。我可以在1分钟内运行相同的查询并得到不同的结果。请注意,我正在使用本地数据库,因此我知道数据没有更改。在我的观点中,使用具有数据集的视图更加可靠,特别是使用连接。