有人知道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,
.....
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("(");
}
.....
和这些类一样,还有其他一些对SQL Server 2000有特殊注意事项吗?有人知道EF 6中是否正式支持SQL Server 2000?
由于
答案 0 :(得分: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">
如您所见,ProviderManifestToken="2000"
显示您的SQL Server版本.EF查看本节以生成T-SQL查询并在该版本下生成脚本。
答案 1 :(得分:7)
虽然存在处理SQL Server 2000的代码,但是有一些有效的查询,实体框架根本无法转换为该版本的SQL Server可以接受的任何形式的SQL。此类查询将导致运行时异常。完全相同的查询适用于为SQL Server 2005或更高版本构建的模型。主要限制是没有好方法在{1}的SQL Server版本中获得APPLY
的效果。
基本上,您可以将EF与SQL Server 2000一起使用,但它不如在较新版本上使用,并且您需要确保应用程序使用的每个查询实际都经过测试,因为它实际上是编译并不代表它会起作用。
此外,设计器的某些部分明确检查SQL Server版本并拒绝SQL Server 2000。