Azure网站部署投掷。 DataBaseFirst和CodeFirst之间的误导

时间:2014-04-06 18:49:17

标签: c# entity-framework azure ef-code-first dbcontext

我遇到了这个试图在Azure上部署MVC网站的“可怕”错误消息:

  

使用数据库优先和模型的T4模板生成的代码   如果在Code First模式下使用,则第一次开发可能无法正常工作。   要继续使用Database First或Model First,请确保实体   框架连接字符串在配置文件中指定   执行申请。要使用这些类,请从中生成   数据库优先或模型优先,使用代码优先添加任何其他   然后使用属性或DbModelBuilder API进行配置   删除抛出此异常的代码。

从头开始使用DataBase First Workflow(添加 ADO.Net实体数据模型元素,然后连接到Azure SQL Server数据库的wizzard)。所以我无法弄清楚为什么它会让Code First陷入困境。使用EF 6.0和T4模板。生成的DbContext如下所示:

    public partial class MyAppEntities : DbContext
    {
        public MyAppEntities()
            : base("name=MyAppEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<AType> AType { get; set; }
        public virtual DbSet<BType> BType { get; set; }
        // etc.
    }

连接字符串如下所示。在DAL项目和StartUp项目Web配置中复制:

<add name="MyAppEntities" connectionString="metadata=res://*/MyAppModel.csdl|res://*/MyAppModel.ssdl|res://*/MyAppModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ndkkyxvogj.database.windows.net;initial catalog=DbName;persist security info=True;user id=myuserid;password=Pa$$word;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

App在本地计算机上运行没有任何问题。

在Azure上部署流程遵循以下步骤。

  • 在Azure上创建(自定义创建)网站并提供数据库凭据

  • 从Azure仪表板下载发布配置文件

  • 在VS中,单击“从启动项目发布”并设置以下参数:

  • - &GT;简介:导入下载的个人资料
  • - &GT;连接:连接良好设置和验证
  • - &GT;设置:根本不确定在这里等待什么!!! 我尝试了两种连接设置:使用建议的连接字符串和EDMX连接字符串。像这样:

    metadata = res:// /MyAppModel.csdl|res:// /MyAppModel.ssdl|res://*/MyAppModel.msl;provider=System.Data.SqlClient;provider connection string =“data source = ndkkyxvogj.database.windows.net; initial catalog = MyDb; persist security info = True; user id = databaseuser; password = Pa $$ word; MultipleActiveResultSets = True; App = EntityFramework”

    < / LI>

尝试评论OnModelCreating()。没工作。 还尝试评论抛出UnintentionalCodeFirstException()。也没用。

尽管研究了其他SO Q&amp; A,找不到任何可靠的解决方案。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

好的,明白了......

实际上,落在that postthat one上,似乎Azure在Azure Sql Server和Azure网站中给出相同的连接字符串名称之间存在误导性。

它与代码优先/模型优先或数据库优先级之间的任何糟糕的EF实现无关......

因此,我在Web App配置,Context Class构造函数以及azure网站连接字符串名称参数中为连接字符串名称添加了一个新的...并且它有效。

这真是一个痛苦的事情......