【问题标题】:Is the Entity Framework compatible with SQL Azure?实体框架是否与 SQL Azure 兼容?
【发布时间】:2012-12-26 16:57:53
【问题描述】:

我无法让实体框架针对 SQL Azure 工作。这只是我还是不打算兼容? (我已经尝试使用 VS2008 以及更新的 VS2010 Beta 2 版本的 EF 原始版本)

为了检查这一点,我创建了最简单的场景。将单个表添加到本地 SQL Server 2008 实例。该表有两列,一个整数类型的主键和一个字符串列。我在表中添加了一行,其值为 (1, foobar)。然后,我将完全相同的设置添加到我的 SQL Azure 数据库中。

创建了一个控制台应用程序并从本地数据库生成了一个 EF 模型。运行应用程序,一切都很好,可以从一个简单的查询中返回单行。更新连接字符串以连接到 SQL Azure,现在它失败了。它连接到 SQL Azure 数据库没有问题,但查询在处理结果时失败。

我使用异常信息追踪了最初的问题。概念模型为我的单个定义实体的实体集设置了属性 Schema="dbo"。我删除了这个属性,现在它失败并出现另一个错误......

"Invalid object name 'testModelStoreContainer.Test'."

“Test”当然是我定义的实体的名称,因此它看起来像是在尝试从返回的结果中创建实体。但是由于某种未知的原因无法解决这个琐碎的场景。

所以要么我犯了一个非常根本的错误,要么 SQL Azure 与 EF 不兼容?这对我来说似乎很疯狂。我想在我的 WebRole 中使用 EF,然后在 Silverlight 客户端使用 RIA 服务。

【问题讨论】:

  • 截至 2015 年年中:是的,当前版本的 Entity Framework 与 SQL Azure 兼容。

标签: entity-framework azure-sql-database


【解决方案1】:

虽然我自己没有这样做,但我很确定 EF 团队的成员已经这样做了,Kevin Hoffman 也是如此。

因此,您可能只是在移植过程中误入歧途。

听起来您试图手动更新 EDMX (XML),从一个针对本地数据库的工作。

如果您这样做,则需要在 EDMX(又名 SSDL)中的 StorageModel 元素中进行大部分更改。但听起来您一直在对 ConceptualModel(又名 CSDL)元素进行更改。

我的猜测是,您只需将 SSDL 中对 dbo 模式的所有引用替换为 SQL Azure 模式即可。

希望对你有帮助

亚历克斯

【讨论】:

    【解决方案2】:

    要回答主要问题 - 是的,至少 Entity Framework v4 可以与 SQL Azure 一起使用 - 我还没有真正尝试过初始版本(来自 .Net Framework 3.5.SP 1)。

    不久前,我做了一个完整的项目并在博客中讲述了这次经历:http://www.sanderstechnology.com/?p=9961希望这可能会有所帮助!

    【讨论】:

      【解决方案3】:

      Microsoft 的 Windows Azure 文档包含 How to: Connect to Windows Azure SQL Database Using the ADO.NET Entity Framework

      创建模型后,这些说明描述了如何将 SQL Azure 与实体框架一起使用:

      1. 按照How to: Migrate a Database by Using the Generate Scripts Wizard (Windows Azure SQL Database) 中的说明将 School 数据库迁移到 SQL 数据库。

      2. SchoolEFApplication 项目中,打开 App.Config 文件。更改连接字符串,使其连接到您的 SQL 数据库。

        <connectionStrings>
            <add name="SchoolEntities"
                 connectionString="metadata=res://*/SchoolDataModel.csdl|res://*/SchoolDataModel.ssdl|res://*/SchoolDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=<provideServerName>.database.windows.net;Initial Catalog=School;Integrated Security=False;User ID=<provideUserID>;Password=<providePassword>;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=False&quot;"
                 providerName="System.Data.EntityClient"/>
        </connectionStrings>
        
      3. 按 F5 对您的 SQL 数据库运行应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-29
        • 2014-08-08
        • 1970-01-01
        • 2012-06-10
        • 2016-07-20
        • 1970-01-01
        • 2011-03-23
        相关资源
        最近更新 更多