Mar*_*als 9 entity-framework sql-server-2000
有人知道EF 6中是否支持SQL Server 2000 for Code First?在官方网站上,我没有找到任何关于EF 6支持哪些SQL Server版本的信息.在一些博客中我发现SQL Server 2000不受支持,但这些博客并非官方消息来源.看看EF 6的源代码,似乎支持我发现了一些SQL Server 2000注意事项的代码.
例如:
SqlVersion 是一个带有SQL Server版本枚举的类,SQL Server 2000就在这个枚举中.
// <summary>
// This enumeration describes the current SQL Server version.
// </summary>
internal enum SqlVersion
{
// <summary>
// SQL Server 8 (2000).
// </summary>
Sql8 = 80,
// <summary>
// SQL Server 9 (2005).
// </summary>
Sql9 = 90,
.....
Run Code Online (Sandbox Code Playgroud)
TopClause是生成select TOP子句的类,在该方法的这个类中WriteSql,为SQL Server 2000生成特殊的SQL语法.
public void WriteSql(SqlWriter writer, SqlGenerator sqlGenerator)
{
writer.Write("TOP ");
if (sqlGenerator.SqlVersion
!= SqlVersion.Sql8)
{
writer.Write("(");
}
.....
Run Code Online (Sandbox Code Playgroud)
和这些类一样,还有其他一些对SQL Server 2000有特殊注意事项吗?有人知道EF 6中是否正式支持SQL Server 2000?
谢谢
Sam*_*ami 11
是的,您可以将EF 6.x用于SQL Server 2000,我将它用于SQL Server 2000而没有任何问题.
但是你应该在你.edmx的模型文件中设置一些东西.
.edmx使用记事本或任何文本编辑器打开模型文件,然后更改此行:
<Schema Namespace="MyModel.Store" Provider="System.Data.SqlClient" ProviderManifestToken="2000" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
Run Code Online (Sandbox Code Playgroud)
如您所见,ProviderManifestToken="2000"显示您的SQL Server版本.EF查看本节以生成T-SQL查询并在该版本下生成脚本.
小智 7
尽管存在处理SQL Server 2000的代码,但是有一些有效的查询,实体框架根本无法转换为该版本的SQL Server可以接受的任何形式的SQL.此类查询将导致运行时异常.完全相同的查询适用于为SQL Server 2005或更高版本构建的模型.主要限制是没有好的方法来获得该APPLY版本的SQL Server的效果.
基本上,您可以将EF与SQL Server 2000一起使用,但它不如在较新版本上使用,并且您需要确保应用程序使用的每个查询实际都经过测试,因为它编译的事实并不意味着它将工作.
此外,设计器的某些部分显式检查SQL Server版本并拒绝SQL Server 2000.