10

Code First クラスを作成しました

SQL でデータベースが自動的に作成されました。

テーブルを削除しました:(

移行を有効にしています:

AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
Database.SetInitializer(new DropCreateDatabaseAlways<SurveyContext>());

まだ

update-database -force

Cannot find the object "dbo.CustomerResponses" because it does not exist or you do not have permissions.

助けてください。

4

4 に答える 4

9

システムテーブルには、と呼ばれるテーブルがあります

__MigrationHistory

...削除しました。

パッケージ マネージャー コンソールで、コマンド「update-database」を実行しました。問題が修正されました。

より詳しい情報:

http://blog.oneunicorn.com/2012/02/27/code-first-migrations-making-__migrationhistory-not-a-system-table/

于 2013-01-30T20:52:11.293 に答える
5
于 2015-06-22T22:12:26.120 に答える
0

過去にそのエラーメッセージがありました....

接続文字列で指定したデータベースが作成されているかどうかを確認します。そうでない場合は、作成してからコードを実行します。

于 2013-01-30T19:38:11.300 に答える
0

明らかにこれを行うためのより良い方法があるかもしれませんが、これは驚くほどトップのGoogleアカウントだったので、これらの回答を読んだ後に私が持っていたアイデアに言及するのは良いことだと思いました:

ここに私が直面した問題があります: 最初に EF6 コードによって生成された FK を変更していて、エラーに遭遇しました:

Unable to determine the relationship represented by navigation property 'Account.SalaryIncomes' of type 'ICollection<Person>'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.

このエラーを解決するためにさまざまな方法でマッピングを定義しようとしましたが、最終的に Person テーブルを削除し、リレーションシップを完全に削除して最初からやり直したところ、エラーは解決されました。ただし、データベースを更新すると、「人」が存在しないと不平を言いました-これが私をここに導きました.

これらの回答を確認した後、データをリロードするのが面倒だと判断し、移行によって C# UP() および Down() メソッドが生成されたと考えました。その移行のパブリック メソッドに変換し、新しい移行からのメソッドを参照する - 更新が機能し、人が作成されました。安全のために、新しい呼び出しを try catch でラップしました... 新しい UP メソッドは次のようになります。

protected override void Up(MigrationBuilder migrationBuilder)
    {
        try
        {
            new AddPeople().CreatePersonTable(migrationBuilder);
        }
        catch { }

        // Origional generated migration code
    }

この回答には、この移行が次回オーバーライドされるかどうかを確認するためにテストしていないキャビアが付属しています(コードが失われます)-ただし、移行が順番に実行されている場合は、実際にこれを一度実行してから削除することができます後。

于 2018-09-23T16:36:16.670 に答える