实体框架和SQL Server临时表

时间:2014-02-03 21:43:12

标签: c# sql-server entity-framework sqlbulkcopy tempdb

我们有一个遗留应用程序,我们正在转向C#,我想使用实体框架(EF)进行数据访问。 SQL Server 2012是数据库,目前我正在使用EF 5.0。原始应用程序进行了大量的数据密集处理。作为该处理的一部分,原始应用程序广泛使用“临时”表。大多数这些“临时”表实际上不是SQL Server临时表(例如tempdb中的#sometable),而是在SQL Server自己的“临时”数据库中创建和销毁的真实表。

现在,我正在使用C#EF我希望能够使用临时表(任何一种类型)作为数据处理的一部分。我已经做了一些谷歌搜索使用临时表与EF - 到目前为止,我发现你可以使用SQLBulkCopy创建tempdb临时表,但没有办法使用EF Linq查询它们,因为它们不是正常的数据结构。我读过的另一个选项是 - 使用存储过程进行处理并向其传递一个表值参数。这将迫使我们拥有数千个存储过程 - 并将大量业务逻辑放在sprocs中。

有没有其他方法可以创建和使用临时SQL Server表? EF 6在这方面是否有任何附加功能?

1 个答案:

答案 0 :(得分:3)

我从未见过EF中使用的临时表。

如果有问题的数据流程非常激烈,那么最好将其作为存储过程保留(我假设这是遗留代码的工作方式)。 EF可以毫无问题地运行存储过程;您甚至可以将结果作为模型实体返回。

如果您确实不想使用存储过程,您还可以使用常规表模拟EF中的临时表,并将其过滤到当前会话(通过使用GUID或其他一些抛出 - 远离合成键)。这种技术工作得很好,但是缺点是在程序完成后需要从表中清除垃圾数据。