3

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

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

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

4

1 回答 1

3

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

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

如果您真的不想使用存储过程,您还可以通过使用常规表来模拟 EF 中的临时表,并将其过滤到当前会话(通过使用 GUID 或其他一些一次性合成键)。这种技术效果很好,但缺点是在您的过程完成时需要从表中清除垃圾数据。

于 2014-02-03T22:01:22.043 回答