c# – 如何让Entity Framework 6在CSDL中使用SQL STUFF函数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何让Entity Framework 6在CSDL中使用SQL STUFF函数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2320字,纯文字阅读大概需要4分钟。
内容图文
![c# – 如何让Entity Framework 6在CSDL中使用SQL STUFF函数?](/upload/InfoBanner/zyjiaocheng/903/3baf6e3865144f74b9446469afcfa631.jpg)
我正在使用EF 6.1,并希望在EDMX文件的CSDL部分中创建一个自定义函数,该部分可以调用SQL 2012中内置的STUFF函数.
我拥有的很简单. (注意:这假定时间是没有冒号的HHMM)
<Function Name="StringToDate" ReturnType="DateTime">
<Parameter Name="strDate" Type="String" />
<Parameter Name="strTime" Type="String" />
<DefiningExpression>
CAST(CASE WHEN strDate <> '' THEN strDate + ' '
+ STUFF(strTime, 3, 0, ':') END AS DateTime)
</DefiningExpression>
</Function>
如果我删除“STUFF”命令但是使用“STUFF”命令我得到“’STUFF’无法解析为有效的类型或函数,上面的代码就有效.”
我可以在LINQ to Entity中使用“Entity.SqlServer.SqlFunctions.Stuff”,但在CSDL中却没有.
注意:我正在使用STUFF命令在时间变量中的第2个和第3个字符之间插入冒号.
编辑:“解决”
这是解决方法,但我仍然想知道如果可能的话如何在CSDL中使用STUFF.
CAST(CASE WHEN strDate <> '' THEN strDate + ' ' + SUBSTRING(strTime, 1, 2) + ':' + SUBSTRING(strTime, 3, 2) END AS DateTime)
编辑:
目前我已将此作为codeplex上的问题发布.如果您有兴趣,请投票.
https://entityframework.codeplex.com/workitem/2583
解决方法:
在数据库提供程序中声明的函数通常在提供程序的命名空间下可用.因此,如果这是一个正常的Entity SQL查询,您应该能够调用STUFF()在它之前添加SqlServer,例如SqlServer.STUFF(strTime,3,0,’:’).
但是,模型定义函数体中的实体SQL只能引用其他规范函数或其他模型定义函数,即模型定义函数不能通过引用提供者特定函数而成为特定于提供者的函数.
这是一个选择采用的限制.当您的应用程序执行LINQ查询时,您可以执行特定于提供程序的函数,因为您的应用程序已经依赖于具有概念和存储架构以及映射规范的完整模型.另一方面,模型定义的函数是概念模型的一部分,它应该是自包含的:您应该能够为不同的模型交换提供者,存储模式或映射规范,而不会使概念模型无效.因此,概念模型中定义的事物不能依赖于其他地方定义的事物.
解决方法:
我做了一些实验,并提出了这种天真的方式来模拟SQL Server的Stuff(),只使用应该跨提供程序工作的规范函数.您可以通过指定概念模型的名称空间来使用您自己的模型定义函数中的类似内容,例如: Model1.Stuff(strTime,3,0,’:’)
<Function Name="Stuff" ReturnType="String">
<Parameter Name="character_expression" Type="String" />
<Parameter Name="start" Type="Int32" />
<Parameter Name="length" Type="Int32" />
<Parameter Name="replaceWith_expression" Type="String" />
<DefiningExpression>
Left(character_expression,start-1)
+ replaceWith_expression
+ Substring(character_expression, start + length, Length(character_expression))
</DefiningExpression>
</Function>
内容总结
以上是互联网集市为您收集整理的c# – 如何让Entity Framework 6在CSDL中使用SQL STUFF函数?全部内容,希望文章能够帮你解决c# – 如何让Entity Framework 6在CSDL中使用SQL STUFF函数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。