我已经将我的项目从Linq到SQL迁移到实体框架6.解决了很多问题后,我终于找到了一个我不确定如何处理它。转换后大约三分之一的单元测试失败,因为存储过程返回标量值just work different way。将存储过程从LINQ迁移到SQL到实体框架6
在Linq-to-SQL中,存储过程返回返回的值。在EF中,他们返回受影响的行数。有解决方法需要更改存储过程(通常从RETURN @retvalue
到SELECT @retvalue
)。但是这需要T-SQL的改变。该项目仍包含一些旧版ASP.NET的遗留代码,如aspnet_Membership_CreateUser
等。这意味着我无法更改这些存储过程,因为ASP.NET ADO.NET成员资格提供程序部分使用了这些过程,部分由Linq-to-SQL代码使用。我考虑的解决方案是使这些部分遗留代码的T-SQL包装。
我想保持存储过程不变的另一个原因是,如果升级到EF不成功,可能会恢复到以前的提交。 A不希望再次更改数据库。但是这个原因不是很强,只是关于我的懒惰。
我知道成员资格提供者是老式的,但我不能在一次提交中重写整个应用程序,我需要保持它的稳定。
完成迁移的最好方法是从EF调用存储过程,如Linq-to-SQL,但我没有找到办法。 EF在这方面让我失望。经过几年的发展,EF不支持从存储过程返回标量值的可能性如何?
你会如何解决这个问题?
最后我最终解决了上面的问题。 ExecuteSqlCommand可以工作,但我无法从数据库自动生成/更新模型。 – qub1n