我有以下情况:我需要创建一些临时表来优化最近出现的负载问题。似乎LINQ to SQL对临时表不起作用,除非它们映射到DBML上。老实说,我仍然不明白范围如何在LINQ to SQL上运行。考虑到这一点,我去定义DBML上的每个临时表。
但是,一如既往,事情不可能那么容易。我无法定义编译时间(这是linq需要的)我的临时表将具有什么名称,因为它将在用户登录系统时定义。要添加更多:我将有几个这样的动态临时表,所以我无法将它全部映射到DBML。
当我尝试通过executeCommand
创建临时表时,选择其结果并将其转换为强类型(TempTableDefinition
)。但是,当我尝试在这个新创建的临时表上插入值时,我得到一个SQLException,说“无效的对象名称#NewTempTable”(这与我用于创建表的名称相同)。
似乎我将不得不使用纯旧的普通ADO.NET来创建每个临时表并将其属性映射到强类型对象(我更喜欢这种方法)。我真的不想将ADO.NET与LINQ混合,因为我只是读到它是一个糟糕的意识形态。另外,我更喜欢使用强类型对象的linq方法来实现ADO.NET。
恢复 那么,你知道甚至可以创建linq to sql可以使用的动态临时表吗?我无法在编译时定义它的名称,仅在执行时间。任何提示将不胜感激。
答案 0 :(得分:1)
问题似乎是L2S默认打开并关闭每个逻辑请求的连接。这会杀死你的临时表。
手动打开连接(当然要关闭它)或将所有内容包装在与{2}集成的TransactionScope
中并保持连接打开。
答案 1 :(得分:0)
优化负载问题
Linq-2-sql和batch / bulk无论如何都不能一起工作。每次插入/更新/删除都会产生一个语句(好的,一个事务但仍然)。对于硬核性能,请避免使用Linq-2-sql,一旦掌握了数据,就可以使用具有强类型等所有优点的Linq。