代码之家  ›  专栏  ›  技术社区  ›  Phil Wright

实体框架是否与SQL Azure兼容?

  •  4
  • Phil Wright  · 技术社区  · 14 年前

    我无法让实体框架与SQL Azure一起工作。这仅仅是我一个人吗,还是它不打算兼容?(我尝试过EF2008的原始版本,以及最新的VS2010 Beta 2版本)

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

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

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

    "Invalid object name 'testModelStoreContainer.Test'."
    

    其中“test”当然是我定义的实体的名称,因此它看起来像是试图从返回的结果创建实体。但由于一些未知的原因,无法解决这个小问题。

    所以,要么我犯了一个非常根本的错误,要么SQL Azure与EF不兼容?我觉得这太疯狂了。我想在我的webrole中使用ef,然后在Silverlight客户端使用ria服务。

    3 回复  |  直到 11 年前
        1
  •  3
  •   Alex James    14 年前

    虽然我自己没有这样做,但我很确定英孚团队的成员也有 Kevin Hoffman .

    所以这可能只是你在移植过程中的一步走错了方向。

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

    如果这样做,那么EDMX中的storageModel元素(也称为ssdl)将需要进行大部分更改。但听起来您好像在概念模型(conceptmodel,又名csdl)元素中进行了更改。

    我的猜测是,您只需要用SQL Azure模式替换ssdl中对dbo模式的所有引用。

    希望这有帮助

    亚历克斯

        2
  •  2
  •   RobS    14 年前

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

    不久前,我做了一个完整的项目,并在博客上介绍了我的经历: http://www.sanderstechnology.com/?p=9961 希望这能有点帮助!

        3
  •  1
  •   ta.speot.is    11 年前

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

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

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

    2. 学校应用程序 项目,打开 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数据库运行应用程序。