我正在使用一个使用大量外部键(100个表)的大型数据库的ASP.NET应用程序中的
Linq到sql.我对
Linq如何允许您创建一个完整的所有关系的数据文本,然后创建自动连接表的Linq语句令我印象深刻.然而,这会导致一个问题:如果我正在提交一个仅用一个或两个表格的Linq语句,最好是拥有一个只包含必要表/表的数据报文?在我看来,如果我使用数据库中的所有表构建数据文本,那么它将非常庞大,并且每次使用Linq加载它将对性能产生负面影响.我对吗?
评论:我知道仅仅根据需要创建数据报文(但是谢谢你提到它).问题在于我是否应该有很多小数据文件,或者建立一个大的数据文件是否可以.
解决方法
您应该每一组连接的表中都有一个DataContext.在大多数应用程序中,这意味着一个DataContext的一切.如果你碰巧有几组不需要一起修改的表,你可能会考虑几个DataContexts.如果您甚至可能需要跨DataContexts进行查询,请勿将它们分开.
DataContext不仅仅是一组表 – 它是一种数据网关模式的实现 – 您可以填写返回所需数据的方法,因此您无需将查询硬编码到您的应用.现在,如果你有多个DataContexts,每页一个,你最有可能最终不得不坚持你的共同功能(认为MyDataContext.GetActiveCustomers())在每一个.这将是可怕的重复.
所以答案是建立很多小数据通常是不行的.如果您的数据完全独立(不同的逻辑或物理数据库),或者您正在使用DataContext作为简单的连接对象(这并不意味着),这是唯一可行的.
但请注意,DataContexts应该是短暂的 – 它们是工作单元模式的实现,因此其生命周期应等于一个逻辑操作(例如,加载一组产品或插入新的订单). DataContexts很容易创建和销毁,所以不要浪费时间缓存他们,因为.