实体框架6支持SQL Server 2000?

时间:2014-08-11 09:38:22

标签: 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就在这个枚举中。

https://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework.SqlServer/SqlVersion.cs

// <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语法。

https://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework.SqlServer/SqlGen/TopClause.cs

    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?

由于

2 个答案:

答案 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。