相关疑难解决方法(0)

"无法找到对象"dbo.xxxx"因为它不存在或您没有权限."

在我的MVC Web应用程序,我添加了一个名为model 竞争力,以现有的模式,并没有add-migrationupdate-database,它工作得很好,然后我创建了基于该模型的控制,这是确定.

但在那之后,我意识到出了问题,所以我用模型删除了控制器及其视图.我也从Server Explorer中删除了表,并创建了一个名为CompetencyLabel的新模型,然后运行add-migration,它工作正常,但是当我运行时update-database,我在PM> window中遇到了这个错误:

"找不到对象"dbo.Competencies",因为它不存在或者您没有权限."

该表已被删除,我不知道为什么它仍然会问我.有人知道如何使它工作吗?非常感谢.

ef-migrations

13
推荐指数
3
解决办法
3万
查看次数

在不丢弃数据的情况下重命名Entity Framework Core中的外键

我有两个模型类:

public class Survey
{
    public int SurveyId { get; set; }
    public string Name { get; set; }
}

public class User
{
    public int UserId { get; set; }

    public int SurveyId { get; set; }
    public Survey Survey { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我要重命名SurveyStudentSurvey,所以就会产生StudentSurveyId.我相应地更新了模型中的类名和属性,并添加了一个迁移.

但是,我得到:

ALTER TABLE语句与FOREIGN KEY约束"FK_User_Surveys_SurveyId"冲突.冲突发生在数据库"AppName",表"dbo.Survey",列"SurveyId"中.

我认为它试图删除数据,因为它需要列中的数据(不能为空)我看到了这个错误.但我不想丢弃数据.我怎样才能重命名呢?

c# sql-server entity-framework entity-framework-core ef-core-2.0

5
推荐指数
1
解决办法
3059
查看次数

Entity Framework Core 2.1,使用代码优先迁移重命名表,而无需删除和创建新表

我正在将netcoreapp 2.1与EF Core 2.1一起使用,并通过数据迁移来更新数据库,但是重命名表时遇到了问题。我在这里的主要问题是一个表(以及以后可能的列)可能会多次使用数据重命名,并且我希望能够重命名它们,同时保持数据完整,但据我看来,这些迁移似乎只涉及保持最新的架构。

此问题类似于使用Entity Framework Core 2.0更改或重命名列名而不会丢失数据,但是由于我的过程是自动化的,因此我需要能够使用dotnet.exe在命令行上使用迁移本身来做到这一点。

为此,我将下面的参数传递给dotnet.exe,构建解决方案,从DLL获取数据库上下文,然后使用下面的代码行进行迁移。

ef migrations add "someMigrationName"
Run Code Online (Sandbox Code Playgroud)

...并更新数据库

var migrator = dbContext.Database.GetService<IMigrator>();
migrator.Migrate();
Run Code Online (Sandbox Code Playgroud)

例如,如果名为“ Courases”的表开始收集数据,我需要能够将其重命名为“ Courses”,而不会影响数据,但是当前,以下是迁移中生成的Up函数。

protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(
            name: "Courases");

        migrationBuilder.CreateTable(
            name: "Courses",
            columns: table => new
            {
                Id = table.Column<Guid>(nullable: false),
                ConcurrencyCheck = table.Column<byte[]>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Courses", x => x.Id);
            });

    }
Run Code Online (Sandbox Code Playgroud)

根据我的阅读,似乎没有办法用重命名的表而不是删除并重新创建表来生成迁移,但这似乎很疯狂,有没有办法做到这一点/是否有可以传递给dotnet.exe的标志,错过了吗?

c# ef-migrations .net-core ef-core-2.1

5
推荐指数
1
解决办法
3047
查看次数