4

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

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

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

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

"Invalid object name 'testModelStoreContainer.Test'."

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

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

4

3 回答 3

3

虽然我自己没有这样做,但我很确定 EF 团队的成员和Kevin Hoffman一样。

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

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

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

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

希望这可以帮助

亚历克斯

于 2009-12-12T17:23:22.133 回答
2

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

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

于 2010-07-25T16:41:51.540 回答
1

Microsoft 的 Windows Azure 文档包含如何:使用 ADO.NET 实体框架连接到 Windows Azure SQL 数据库

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

  1. Migrate the School database to SQL Database by following the instructions in How to: Migrate a Database by Using the Generate Scripts Wizard (Windows Azure SQL Database).

  2. In the SchoolEFApplication project, open the App.Config file. Change the connection string so that it connects to your SQL Database.

    <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. Press F5 to run the application against your SQL Database.
于 2012-12-26T08:57:53.337 回答