【发布时间】:2015-09-26 09:29:04
【问题描述】:
我已将我的项目从 Linq-to-SQL 迁移到 Entity Framework 6。解决了这么多问题后,我终于找到了一个我不知道该怎么办的问题。转换后大约三分之一的单元测试失败,因为存储过程返回标量值just work different way。
在 Linq-to-SQL 中,存储过程返回返回值。在 EF 中,它们返回受影响的行数。有一些解决方法需要更改存储过程(通常从RETURN @retvalue 到SELECT @retvalue)。但这需要对 T-SQL 进行更改。该项目仍然包含一些旧 ASP.NET 的遗留代码,例如 aspnet_Membership_CreateUser 等等。这意味着我无法更改这些存储过程,因为其中一部分由 ASP.NET ADO.NET Membership 提供程序使用,一部分由 Linq-to-SQL 代码使用。我考虑的解决方案是为这些部分遗留代码制作 T-SQL 包装器。
我想保持存储过程不变的另一个原因是,如果升级到 EF 不成功,可能会恢复到以前的提交。 A 不想来回更改数据库。不过这个理由不是那么强,只是因为我的懒惰。
我知道会员提供者是老式的,但我不能在一次提交中重写整个应用程序,我需要保持稳定。
完成迁移的最佳方法是从 EF 调用存储过程,如 Linq-to-SQL,但我没有找到方法。英孚对此感到失望。经过多年的发展,EF 怎么可能不支持从存储过程返回标量值?
你会如何解决这个问题?
【问题讨论】:
标签: sql-server entity-framework stored-procedures linq-to-sql