1

我有以下情况:我需要创建一些临时表来优化最近发生的负载问题。LINQ to SQL 似乎不适用于临时表,除非它们映射到 DBML。老实说,我仍然不明白范围如何在 LINQ to SQL 上工作。考虑到这一点,我去定义 DBML 上的每个临时表。

但是,和往常一样,事情不可能那么容易。我无法在编译时间(这是 linq 需要的)定义我的临时表将具有什么名称,因为它将在用户登录系统时定义。添加更多:我将有几个这样的动态临时表,所以我无法将它们全部映射到 DBML。

当我尝试通过创建临时表时executeCommand,选择其结果并将其转换为强类型(TempTableDefinition)。但是,当我尝试在这个新创建的临时表上插入值时,我得到一个 SQLException 说“无效的对象名称 #NewTempTable”(这是我用来创建表的同名)。

看来我将不得不使用纯旧的普通 ADO.NET 来创建每个临时表并将其属性映射到强类型对象(我更喜欢这种方法)。我真的不想将 ADO.NET 与 LINQ 混合使用,因为我刚刚读到这是一个坏主意。另外,与 ADO.NET 方式相比,我更喜欢强类型对象的 linq 方法。

简历: 那么,您知道或者甚至可以创建 linq to sql 可以使用的动态临时表吗?我无法在编译时定义它的名称,只能在执行时定义。任何提示将不胜感激。

4

2 回答 2

1

问题似乎是 L2S 默认打开和关闭每个逻辑请求的连接。这会杀死你的临时表。

要么手动打开连接(当然要关闭它),要么将所有内容包装在TransactionScope与 L2S 集成并保持连接打开的 a 中。

于 2012-12-07T21:36:15.183 回答
0

优化负载问题

Linq-2-sql 和 batch/bulk 无论如何都不能一起工作。每个插入/更新/删除都会产生一个语句(好的,一个事务,但仍然)。对于核心性能,请避免使用 Linq-2-sql,一旦您输入了数据,请使用具有强类型等所有优势的 Linq。

于 2012-12-07T19:34:57.530 回答