Entity Framework 6支持SQL Server 2000吗?

9
有人知道EF 6对于Code First是否支持SQL Server 2000吗?在官方网站上,我没有找到任何关于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是生成SQL的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特殊考虑的类吗?有人知道SQL Server 2000在EF 6中是否得到官方支持?

谢谢

2个回答

12

是的,您可以在 SQL Server 2000 上使用 EF 6.x,我正在使用它,并没有发现任何问题。

但是,您应该在模型的 .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 查询并在该版本下生成脚本。


8

虽然有代码处理SQL Server 2000,但实体框架(Entity Framework)无法将某些有效查询翻译成任何该版本的SQL Server可接受的形式,这样的查询会导致运行时异常。相同的查询在建立给SQL Server 2005或更新版本的模型时可以工作。主要限制是在这个版本的SQL Server中没有好的方法获取APPLY的效果。

基本上,你可以使用EF与SQL Server 2000,但它比新版本上的EF不那么有用,并且你需要确保每个应用程序使用的查询都经过测试,因为它能够编译并不意味着它一定能正常工作。

此外,设计器的部分明确检查SQL Server版本并拒绝SQL Server 2000。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接