我根据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
表还是需要运行更新命令?
答案 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类的新命名空间。
这解决了这个问题,我现在可以登录我的数据库了。