【问题标题】:When deploying to Azure: System.Data.SqlClient.SqlException: Incorrect syntax near 'ON'部署到 Azure 时:System.Data.SqlClient.SqlException:'ON' 附近的语法不正确
【发布时间】:2015-04-30 22:37:02
【问题描述】:

我有一个 Web 应用程序,每当我将其部署到 Azure 时,它​​都会返回以下错误:

System.Data.SqlClient.SqlException:“ON”附近的语法不正确

它告诉我错误来自我的 _Layout.cshtml 中的第 45 行:

@Html.Action("LoginPartial", "Home")

现在,在HomeController 我有以下内容:

    [AllowAnonymous]
    [ChildActionOnly]
    public ActionResult LoginPartial()
    {
        var userId = User.Identity.GetUserId();
        var model = context.Users.Find(userId);

        // In case no such user is found and the model is called
        if (model == null)
        {
            model = new ApplicationUser()
            {
                FirstName = "N/A",
                LastName = "N/A"
            };
        }

        return PartialView("~/Views/Shared/_LoginPartial.cshtml", model);
    }

...每当我在本地调试应用程序时,它都能正常工作 - 即使是远程连接的数据库(它们从 Azure 中的 SQL Server 运行)。

我使用此代码的目的是从共享视图 (_LoginPartial.cshtml) 显示登录用户的名字和姓氏,正如我所说,它在本地运行良好 - 但每次我将其发布到 Azure 时都会崩溃。

如果我注释掉 LoginPartial() 方法中的前两行,问题就会消失。但是话又说回来,该方法的目的也是如此……显然,从数据库中访问数据存在问题。

有什么想法吗?

【问题讨论】:

  • 什么是context,什么是.Users,什么是.Find()
  • context 是 AspNetUsers 表所在的数据库上下文 (ApplicationDbContext),.Users 用于访问数据库中的用户表,.Find() 返回具有给定 UserID 的 ApplicationUser 对象。这一切都是微软的一部分。 AspNet.Identity 和我自己写的什么都没有。我已经使用断点调试了这一部分,并且在本地运行时,它按预期从数据库上下文中检索 ApplicationUser 对象。
  • 您的数据库提供商是什么(在 entityFramework-section 中配置)?
  • 我不太清楚你所说的 entityFramework-section 是什么意思,但如果你说的是 web.config 文件,它就是这样写的:<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 在连接字符串中:@ 987654328@

标签: asp.net sql-server azure asp.net-mvc-5 azure-sql-database


【解决方案1】:

我终于弄清楚了为什么它无法从 Azure 运行。

将解决方案与数据库一起部署时,我发现不支持用户实例化,因此数据库没有成功部署。

通过在 SQL Server 上手动创建数据库,然后从“发布 Web”向导中选择它,而不是附加数据库文件,应用程序可以从 Azure 运行而没有问题。

我还在“发布 Web”向导中为每个数据库选择了“执行代码优先迁移”。不知道这是否与它有关,但可能值得一提。

【讨论】:

  • 尽管如此,我仍然不明白为什么应用程序能够在本地调试模式下运行,而数据库仍然在同一个 SQL Server 上(而不是作为本地文件)。
猜你喜欢
  • 2021-03-31
  • 2019-07-17
  • 2017-12-08
  • 2014-05-09
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多