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

时间:2017-02-22 14:17:24

标签: c# azure xamarin.ios azure-mobile-services

我根据Microsoft的本教程使用Azure门户为Xamarin iOS应用创建了.NET后端:tutorial

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

There is already an object named in the database

现有数据库处于不同的订阅状态,该订阅将被停用。我将其导入新订阅并进行设置。

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

由于我更改了新后端的命名空间,我已经从StackOverflow上的答案中读到了这个:

  

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

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

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

Database.SetInitializer<YourContext>(null);

最后,我尝试在Package Console Extension i Xamarin Studio中使用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 个答案:

答案 0 :(得分:0)

我设法通过更改dbo.__MigrationHistory表格中所有行的contextKey值来解决此问题,基于上面的解释,来自 Elnaz SO question的答案。我是查看错误的命名空间,指向DBContext。所以不要这样:

testService.Models.testserviceContext 

来自这一行:

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

我将表中的值更新为:

testService.Migrations.Configuration

这是我的Configuration类的新命名空间。

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