带有 .NET 后端的 Azure 移动服务 - 数据库中已经存在一个对象

Posted

技术标签:

【中文标题】带有 .NET 后端的 Azure 移动服务 - 数据库中已经存在一个对象【英文标题】:Azure mobile services with .NET backend- There is already an object named in the database 【发布时间】:2017-07-12 15:38:25 【问题描述】:

我按照 Microsoft 的本教程使用 Azure 门户为 Xamarin ios 应用创建了一个 .NET 后端:tutorial

然后我使用了现有的数据库和这个新的后端。但是,当我尝试登录我的移动应用程序时,登录失败并出现上述错误:

There is already an object named in the database

现有数据库在另一个订阅下,该订阅将被停用。我将其导入新订阅并进行了设置。

我在这里看到了大量类似的问题,也尝试了一些解决方案。我仍然有错误。

由于我在新后端更改了命名空间,因此我从 *** 上的答案中阅读了此内容:

您的数据库中有一个名为 dbo.__MigrationHistory 的表。该表有一个名为 ContextKey 的列。 此列的值基于您的命名空间。例如是“DataAccess.Migrations.Configuration”。 当您更改命名空间时,会导致具有不同命名空间的重复表名。 因此,在代码端更改命名空间后,也要在数据库中更改此表中的命名空间(适用于所有行)。

我怀疑这可能是我的问题,但我目前无法访问我的数据库。

我也试过这个没有用的解决方案:

Database.SetInitializer<YourContext>(null);

最后,我尝试在 Xamarin Studio 的 Package Console Extension 中使用 update-database 命令,但出现错误 :

command update-databse not found

我现在不确定如何解决此问题。有人能指出我正确的方向吗?

谢谢。

编辑

根据上面关于更改上下文的解释,我已经在Configuration.cs 类中更新了如下:

internal sealed class Configuration : DbMigrationsConfiguration<testService.Models.testserviceContext>  // new namespace changed here

    public Configuration()
    
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;

        SetSqlGenerator("System.Data.SqlClient", new EntityTableSqlGenerator());
    

  

那么这会更新dbo.__MigrationHistory 表还是我还需要运行更新命令?

【问题讨论】:

【参考方案1】:

我设法通过更改dbo.__MigrationHistory 表中所有行的 contextKey 值来解决这个问题命名空间,它指向 DBContext。所以代替这个:

testService.Models.testserviceContext 

来自这一行:

internal sealed class Configuration : DbMigrationsConfiguration<testService.Models.testserviceContext>  // new namespace changed here

我将表中的值更新为:

testService.Migrations.Configuration

这是我的配置类的新命名空间。

这解决了问题,我现在可以登录我的数据库了。

【讨论】:

以上是关于带有 .NET 后端的 Azure 移动服务 - 数据库中已经存在一个对象的主要内容,如果未能解决你的问题,请参考以下文章

带有 Node.js 后端的移动应用程序 - 为客户端开发选择啥框架?

仅使用 Azure 移动服务 .Net 后端进行推送

iOS 推送通知 ASP.NET 与 Azure 移动服务通信

带有移动客户端的 websocket

带有 Spring JMS 的 Azure 接收多次接收相同的消息并将消息移动到 DLQ

Azure 移动应用服务安全