<Da​​tabase>コンテキストを支えるモデルは、データベースが作成されてから変更されました


253

エラーメッセージ:

「データベースが作成されてから、「AddressBook」コンテキストをバッキングするモデルが変更されています。データベースを手動で削除/更新するか、IDatabaseInitializerインスタンスを使用してDatabase.SetInitializerを呼び出します。たとえば、RecreateDatabaseIfModelChanges戦略は、データベースを自動的に削除して再作成します。オプションで新しいデータをシードします。」

私はコードファースト機能を使用しようとしています、そして私が書いたものは次のとおりです:

var modelBuilder = new ModelBuilder();
var model = modelBuilder.CreateModel();
using (AddressBook context = new AddressBook(model))
{
    var contact = new Contact
    {
        ContactID = 10000,
        FirstName = "Brian",
        LastName = "Lara",
        ModifiedDate = DateTime.Now,
        AddDate = DateTime.Now,
        Title = "Mr."

    };
    context.contacts.Add(contact);
    int result = context.SaveChanges();
    Console.WriteLine("Result :- "+ result.ToString());
}

コンテキストクラス:

public class AddressBook : DbContext
{
    public AddressBook()
    { }
    public AddressBook(DbModel AddressBook)
        : base(AddressBook)
    {

    }
    public DbSet<Contact> contacts { get; set; }
    public DbSet<Address> Addresses { get; set; }
}

そして接続文字列:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
    <add name="AddressBook" providerName="System.Data.SqlClient"  
         connectionString="Data Source=MyMachine;Initial Catalog=AddressBook;
         Integrated Security=True;MultipleActiveResultSets=True;"/>
    </connectionStrings>
</configuration>

したがって、データベース名は「AddressBook」であり、連絡先オブジェクトをコンテキストに追加しようとするとエラーが発生します。ここで何か不足していますか?



データベースから__MigrationHistoryテーブルを削除する
Zahid Hasan

回答:


397

今それは:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    Database.SetInitializer<YourDbContext>(null);
    base.OnModelCreating(modelBuilder);
}

YourDbContext.csファイル内。


本番データベースを手動で変更し、移行をオフにしたところ、機能しました。ありがとう
Mohsen Afshin 2012

13
追記

48
Global.asaxより優れているのは、これをDbContextクラスのコンストラクターに配置することです。これにより、Global.asaxファイルで制御される1つのサイトだけでなく、コンテキストを使用するすべてのサイトで機能します。
Corin

7
おそらくコンテキストクラスの静的コンストラクタに配置して、一度だけ呼び出されるようにするのがおそらく最善です。このサンプルビデオのように:msdn.microsoft.com/en-us/data/jj572367
Christian Fredh

3
保護されたオーバーライド内に配置する必要があります。void OnModelCreating(DbModelBuilder modelBuilder){Database.SetInitializer <YourDbContext>(null); base.OnModelCreating(modelBuilder); }
Chris Voon、2014

135

実際に何が行われているのかについてジェフが投稿したスコット・グのブログからの情報は次のとおりです。

この例外が発生している場合:

「データベースが作成されてから、 'Production'コンテキストをバッキングするモデルが変更されました。データベースを手動で削除/更新するかDatabase.SetInitializerIDatabaseInitializerインスタンスで呼び出してください。」

ここで何が起こっているのか、それについて何をすべきかです:

モデルが最初に作成されるとき、DatabaseInitializerを実行して、データベースがない場合はデータベースを作成するか、シードデータを追加します。デフォルトのDatabaseInitializerは、モデルを使用するために必要なデータベーススキーマを、データベースで作成されたEdmMetadataテーブルに格納されているスキーマのハッシュと比較しようとします(コードファーストがデータベースを作成する場合)。既存のデータベースにはEdmMetadataテーブルがないため、ハッシュもありません。そのため、今日の実装では、そのテーブルがない場合にスローされます。fialバージョンはデフォルトなので、出荷する前にこの動作の変更に取り組みます。それまでは、既存のデータベースは通常データベース初期化子を必要としないため、次の呼び出しによってコンテキストタイプに対してオフにすることができます。

Database.SetInitializer<YourDbContext>(null);

ジェフ


9
今日試してみたところ、「モデルが変更されました」というメッセージは表示されず、代わりに「無効なオブジェクト名 'dbo.Table'」が表示されます
Stefan

3
Jeffはこれを回避策にしたいと考えていましたが、それから2年以上経っています。そのため、SetInitializerをnullにする必要があります。正しい?これが移行ワークフローにどのように適合するかを誰かに説明していただけませんか。
kroiz 2014年

2
@jakejgordon:私もEF6を使用していますが、Global.asaxにある場合は、Webサイトを実行したときの問題のみが修正されます。単体テストがあれば、あなたはOOLです。YourDbContextのコンストラクターに配置することをお勧めします。これにより、Webサイトやテストプロジェクトを含むすべてのプロジェクトで修正されます。
2014

1
IMO、このコード行を追加する必要がある理由を実際に説明しているため、この回答はより高いスコアになるはずです。ありがとうございました。
ポール、

1
@StefanBergfeldtあなたまたは誰かがInvalid object name 'dbo.Table接続文字列attachDbFilenameと初期カタログをチェックする場合
benscabbia

41

Entity Framework 5.0.0.0〜6.1.3の場合

あなたはDO確かに次のことをやりたいです。

1. using System.Data.Entity;   to startup file (console app --> Program.cs / mvc --> global.asax
2. Database.SetInitializer<YourDatabaseContext>(null);

はい、マット・フリアは正しいです。更新-編集: 警告は、DbContextクラスに追加されたglobal.asaxにこのコードを追加する代わりに、その点で他の人に同意することです

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // other code 
    Database.SetInitializer<YOURContext>(null);
    // more code here.
}

他の人が述べたように、これは単体テストの処理にも適しています。

現在、私はこれをEntity Framework 6.1.3 /.net 4.6.1で使用しています

近いうちにCOREスニペットを提供するために戻ってきます。


1
ありがとうございました!Program.csは間違いなくコンソールで機能します。
HockeyJ 2014年

しかし、初めてデータベースを初期化するとき、onModelCreatingメソッドにsetinitializer nullを配置すると、データベースが作成されません。何かご意見は ?イベントを使用して(var context = Activator.CreateInstance <TContext>()){context.Database.Initialize(true); }
Rupesh Kumar Tiwari

私は使用するコードを見つける必要があります。そのため、時々行をコメントアウトしてスワップします...問題をすぐに思い出せないので、調べる必要があります。
トムスティッケル2015

1
最良のソリューション。それは私の解決策を実行させます、そして私はその影響が何であるかを知りません。コミットしてデプロイします。
Svend

32

SQL Server Management Studioで次のsqlコマンドを実行するだけです。

delete FROM [dbo].[__MigrationHistory]

1
あなたは私の命を救いました!ありがとうございました。
Marek Dorda

31

この修正は、CTP5以降は機能しません。

あなたはしなければならない Database.SetInitializer<YourContext>(null);


1
それはどこに行くのですか... OnModelCreatingにはDbDatabaseという名前のアクセス可能なものは何もありません
James Reategui

起動時のどこかで、Application_Startに設定しました。
chrisortman

Database.SetInitializerはEF 4.3最終リリースで正常に動作するようです。
Richard Beier

「この修正はCTP5以降は機能しません」とは、2010年8月30日の承認済みの回答が彼の言っていることだと思います。
トムスティッケル2015

19

ここで更新の答えと考えを見つけました。以下を実行するだけです。

public class AddressBook: DbContext
{
   protected override void OnModelCreating(ModelBuilder modelBuilder)
   {
    modelBuilder.IncludeMetadataInDatabase = false;
   }
}

12
これは新しいバージョンのEF modelBuilder.Conventions.Remove<IncludeMetadataConvention>();では不可能であり、状況を改善することもできません。DbDatabase.SetInitialzer(null); 動作します。
JTew

@TomStickel-同意する。stackoverflow.com/a/6143116/255562を回答としてマークしました。
Ashish Gupta 2017

16

または、Application_Start()の下のGlobal.asax.csファイルに次の行を追加できます。

System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<ProjectName.Path.Context>());

ProjectName.Path.Contextを必ず名前空間とコンテキストに変更してください。最初にコードを使用すると、スキーマに変更が加えられるたびに、新しいデータベースが削除されて作成されます。


試作のみを行っていたため、まさに必要なものでした。どうもありがとう。
学習者

8

私はこの問題を解決するために何日も費やし、さまざまな投稿を分析し、多くのオプションを試し、最終的に修正しました。 この2つのプロジェクトは、EFコードの最初の移行を使用して私のソリューションにあります。

  • すべての私のコードの最初のエンティティ、DbContext、Mirgations、および一般的なリポジトリを含むアセンブリとして主に使用するコンソールアプリケーション "DataModel"。このプロジェクトには、パッケージマネージャーコンソールから移行を生成できるように、別の空のローカルデータベースファイル(DataModel / App_Dataフォルダー内)を含めました。
  • DataModelプロジェクトを参照し、プロジェクトに含まれていないWebApi / App_Dataフォルダーのローカルデータベースファイルを使用するWebApi

WebApiを要求したときにこのエラーが発生しました...

私の環境:

  • Windows 8.1 x64
  • Visual Studio 2015 Professional with Update 1
  • .NET Framework 4.6.1を対象とするすべてのプロジェクト
  • NuGetのEntityFramework 6.1.3

ここで、言及された例外を回避するために、注意する必要があるすべての発言と、満たす必要があるすべての条件/要件を収集しました。

  1. ソリューションのすべてのプロジェクトで使用するEntityFramework Nugetパッケージのバージョンは1つだけにする必要があります。
  2. すべての移行スクリプトを順次実行して作成されたデータベースは、ターゲットデータベースと同じ構造/スキーマを持ち、エンティティモデルに対応している必要があります。次の3つは、互いに正確に対応/反映/一致している必要があります。
    • 最後までのすべての移行スクリプト
    • 現在のコードの最初のエンティティモデルの状態(DbContext、エンティティ)
    • ターゲットデータベース
  3. ターゲットデータベース(mdfファイル)を更新するか、最新の移行スクリプトに対応させる必要があります。ターゲットデータベースの "__MigrationHistory"テーブルに、すべての移行スクリプトのレコードが含まれていることを確認します。これは、すべての移行スクリプトがそのデータベースに正常に適用されたことを意味します。Visual Studioを使用して、データベースに対応する正しいコードの最初のエンティティとコンテキストを生成することをお勧めします。プロジェクト->新しい項目の追加-> ADO.NETエンティティデータモデル->データベースからのコードファースト: もちろん手動でモデル(最初のエンティティとコンテキストをコード化)を記述してから、初期移行とデータベースを生成できるデータベースがありません。
  4. スタートアッププロジェクトの構成ファイル(Web.config / App.config)のMyConnectionStringなどの接続文字列の名前:

    <configuration>
      <connectionStrings>
        <add name="MyConnectionString" connectionString="...">
      </connectionStrings>
    <configuration>

    DbContextのコンストラクターで渡されるパラメーターと等しい必要があります。

     public partial class MyDbContext : DbContext
     {
        public MyDbContext()
           : base("name=MyConnectionString"){}
        ...
  5. パッケージマネージャーコンソールを使用する前に、更新または移行の生成に正しいデータベースを使用しており、必要なプロジェクトがソリューションのスタートアッププロジェクトとして設定されていることを確認してくださいデータベースへの接続には、プロジェクト内でスタートアッププロジェクトとして設定されている.configファイルの接続文字列が使用されます。
  6. そして、私の問題を修正したメイン:それは奇妙ですが、私のWebApi / binフォルダーでは、DataModel.exeは古く、最後のビルド以降更新されていません。移行は私のアセンブリDataModel.exeに埋め込まれていたので、私のWebApiは古いマイグレーションを使用してデータベースを更新しました。WebApiでデータベースを更新した後、DataModelからの最新の移行スクリプトに対応しないのはなぜですか。次のコードは、WebApi / App_Dataフォルダーに最新の移行ローカルデータベースを自動的に作成(存在しない場合)または更新します。

       public class WebApiApplication : System.Web.HttpApplication
       {
           protected void Application_Start()
           {
               Database.SetInitializer(new MigrateDatabaseToLatestVersion<ODS_DbContext, Configuration>()); 
               ...

    私はクリーンで再構築ソリューションを試してみましたが、WebApiからbinおよびobjフォルダーを完全に削除し、WebApi / App_Dataからデータベースファイルを削除し、WebApiを構築して再起動し、リクエストを行い、正しいデータベースを作成しました-遅延初期化(使用上記の行)、これは最新の移行に対応し、例外はこれ以上表示されませんでした。 したがって、これで問題が解決する可能性があります。

    1. スタートアッププロジェクトからbin、objフォルダーを手動で削除します(データベースを生成/更新します)。
    2. スタートアッププロジェクトをビルドするか、ソリューションをすべてクリーンアップして再ビルドします。
    3. プロジェクトを開始してデータベースを再作成する(上記の行を実行します)か、パッケージマネージャーコンソールの「update-database」コマンドを使用します。
    4. 生成されたdbおよび__MirgationHistoryが最新の移行スクリプトに対応しているかどうかを手動で確認します。

5

私にとって、4.3.1へのアップグレードでは、EdmMetaDataテーブルを切り捨てるか、完全に削除します。


4.3.1に更新してから、EdmMaetaDataテーブルの名前を変更しました。これで、必要に応じてモデルに変更を加えることができるようになり、モデルをサポートする煩わしいエラーメッセージが表示されなくなりました。
Ashok Padmanabhan

3

VB.NET開発者向け:

メソッドApplication_Start()の最後にあるGlabal.asax.vbファイルに次の行を追加します

Database.SetInitializer(Of ApplicationDbContext)(Nothing)

ApplicationDbContextを特定のDbコンテキストに変更します。


2

私にはこの問題があり、1つのプロジェクトがSQLExpressを指しているのに、問題のあるプロジェクトはLocalDbを指していることがわかりました。(それぞれのweb.config内)。愚かな見落としですが、他の誰かがこの問題をトラブルシューティングしている場合に備えて、ここで注目する価値があります。


2

これは、実行されていないコンテキストにいくつかの変更があったことを意味します。最初にAdd-Migrationを実行して、行った変更(気付かない可能性がある変更)を生成してから、Update-Databaseを実行してください


2

私は同じ問題を抱えていました-移行を再度追加してデータベースを更新することはできませんでした、そして上記の答えのどれも正しくないようです。それからインスピレーションが私を襲った-私は複数の層(1つのWeb、1つのデータ、1つのビジネス)を使用しています。データレイヤーには、コンテキストとすべてのモデルがあります。Webレイヤーがこの例外をスローすることはありませんでした。ビジネスレイヤー(テストとデバッグ用のコンソールアプリケーションとして設定したもの)でした。ビジネス層が正しい接続文字列を使用してデータベースを取得し、コンテキストを作成していないことがわかりました。そのため、接続文字列をビジネスレイヤー(およびデータレイヤー)のアプリ構成に追加し、ビオラが機能します。同じ問題が発生する可能性がある他の人のためにここにこれを置きます。


1

Database.CompatibleWithModelメソッド(EF5で利用可能)を使用して、使用する前にモデルとDBが一致するかどうかをテストします。コンテキストを作成した直後にこのメソッドを呼び出します...

        // test the context to see if the model is out of sync with the db...
        if (!MyContext.Database.CompatibleWithModel(true))
        {
            // delete the old version of the database...
            if (File.Exists(databaseFileName))
                File.Delete(databaseFileName);
            MyContext.Database.Initialize(true);

            // re-populate database

        }

1

しかし、良い提案は、すべてのケースでそれほど正確ではありません。1つわかります。Visual StudioでPMウィンドウを使用して「enable-migrations」を実行していることを確認する必要があります。移行フォルダーがプロジェクトに追加されます。

フォルダーに追加された2つのc#クラスファイルに、すべてのモデルとそれぞれのプロパティが含まれていることを確認します。

ソリューションを構築するすべてのものがあり、展開用に公開されている場合。

ロジックは、アプリケーションに現在のメタデータを置き換えるメタデータがないため、既存のメタデータを上書きできないことです。その結果、「データベースを作成してから、コンテキストをサポートするモデルが変更されました」というエラーが発生します。


1

誰かが私のと同じシナリオを持っている場合に備えて。

私は最初にデータベースを持っていますが、同時にasp.net IDを使用しています

だから私は私のwebconfigに2つのconnectionStringsを持っています、そしてそれで問題はありません。asp.net IDテーブルを手動で生成するためのスクリプトを作成/実行したのですが、できません。

したがって、DROPでは、まず手動で/スクリプトから作成されたすべてのasp.net IDテーブルを削除します。

DROP TABLE __MigrationHistory
DROP TABLE AspNetRoles
DROP TABLE AspNetUserClaims
DROP TABLE AspNetUserLogins
DROP TABLE AspNetUserRoles
DROP TABLE AspNetUsers

1

これらのソリューションはどれも機能しません(スキーマチェックを完全に無効にすることを除いて)。結局、私たちのバージョンのNewtonsoft.jsonでミスマッチがありました

AppConfigが正しく更新されませんでした:

<dependentAssembly>
   <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
  </dependentAssembly>

解決策は、アセンブリのバージョンを実際に展開していたバージョンに修正することでした。

<dependentAssembly>
   <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="10.0.0.0" />
  </dependentAssembly>

Newtonsoft.jsonのバージョンにも同様の問題があり、バージョンを更新すると問題が解決しました。
Rui Estreito

0

このトピックに関するいくつかの調査の結果、ローカルSQLサーバーExpressで以前に作成されたdbのインスタンスがある場合、基本的にエラーが発生することがわかりました。したがって、dbを更新してdbを更新しようとするときはいつでも、/ Update Databaseを使用してコマンドを実行せずにdbでいくつかのコードを実行しPackage Manager Consoleます。まず、ローカルのSQL Express上の以前のデータベースを手動で削除する必要があります。

また、このソリューションAutomaticMigrationsEnabled = false;は、構成に含まれていない限り機能します。

バージョン管理システム(git、svnなど)を使用していて、他の開発者が本番フェーズでdbオブジェクトを更新する場合、コードベースを更新してアプリケーションを実行するたびにこのエラーが発生します。

上記のように、コードベースにはこれに対するいくつかの解決策があります。ただし、これは場合によっては最も実用的なものです。


0

私もPro ASP.NET MVC 4の本を読んでいて、同じ問題に遭遇しました。私にとって、本の「モデル検証の追加」セクションで規定された変更を行った後、問題が発生し始めました。問題を解決する方法は、データベースをlocaldbから本格的なSQL Server 2012サーバーに移動することです。(ところで、私は幸運にも本格的なバージョンに切り替えることができたので、私を嫌いにしないでください。;-)))問題を引き起こしているデータベースへの通信に何かがあるはずです。


メタデータなどではなく、それがデータベースへの通信であることをどのようにしてわかりますか?
2013年

2
返事が遅くなってごめん。それは全くコミュニケーションの問題ではないことが判明しました!dbを再作成すると、同じ問題が再び発生したため、問題がマスクされました。__Migrationxxx(テーブルを削除したばかりなので、テーブルの正確な名前を思い出せません)は、efによって作成されます。削除するだけで大​​丈夫です。
J3Speaks 2013

@ MyJ3すべての人々は、これらのすべての行とコード行を噴出しています。これだけで十分!答えに値する(オプションのシナリオ)。
Terrance00

@ Terrance00ありがとう!
J3Speaks

0

次の手順を確認してください

  1. Database.SetInitializer(null); -> Global.asax.cs

2。

  1. あなたのコンテキストクラス名はチェックと一致する必要があります

0

以下Global.asax.csを含むApplication_Startイベントを含むを変更します。

Database.SetInitializer<YourDatabaseContext>(
 new DropCreateDatabaseIfModelChanges<YourDatabaseContext>());

5
個人的には、これが何をするかについて少し明確になります。
ケーシー

3
いいえいいえいいえ、DropCreateDatabaseIfModelChangesを99%使用したくない!
トムスティッケル2015

0

このエラーは、接続文字列の問題と、接続文字列名がデータベースコンテキスト宣言と一致するかどうかを示している可能性があります。

ローカルデータベースに誤って名前を付けた(愚かな間違い)ため、「DefaultConnection」のweb.config内の接続文字列の名前がMyDbContextと一致しなかったため、このエラーが発生しました。

public MyDbContext(): base("DefaultConnection")
{}


<connectionStrings>
    <add name="DefaultConnection" ...
  </connectionStrings>

0

System.Data.Entityの使用に属するDatabase SetInitializerを使用してみてください。

Global.asax

protected void Application_Start()
{
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<yourContext>());
}

これにより、モデルが変更されるたびに新しいデータベースが作成されますが、データベースは空になります。ダミーデータで埋めるために、シードを使用できます。次のように実装できます。

シード::

protected void Application_Start()
{
    Database.SetInitializer(new AddressBookInitializer());
                ----rest code---
}
public class AddressBookInitializer : DropCreateDatabaseIfModelChanges<AddressBook>
{
    protected override void Seed(AddressBook context)
    {
        context.yourmodel.Add(
        {

        });
        base.Seed(context);
    }

}

0

奇妙ですが、ここでの答えはすべて私にとって役に立たなかったのです。私にとっては初期化子を働いた

MigrateDatabaseToLatestVersion

ここに私の解決策があります(私は知っています、それははるかに単純にすることができますが、それは私がそれを使用する方法です):

class MyDbMigrateToLatest : MigrateDatabaseToLatestVersion<MyDbContext, Configuration>
{
}

public class MyDbContext: DbContext
{
    public MyDbContext() : base("DbName")
    {
        SetInitializer();
    }

    public MyDbContext(string connString) : base(connString)
    {
        SetInitializer();
    }

    private static void SetInitializer()
    {
        if (ConfigurationManager.AppSettings["RebuildDatabaseOnStart"] == "true")
            Database.SetInitializer(new MyDbInitializerForTesting());
        else
            Database.SetInitializer(new MyDbMigrateToLatest());
    }
}

public sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(MyDbContext context)
    {
        // Whatever
    }
}

MyDbInitializerForTestingはDropCreateDatabaseAlwaysを継承するだけなので、特定のケース(テスト)では、データベース全体が再構築されます。それ以外の場合は、最新バージョンに移行されます。

私のソース:https : //msdn.microsoft.com/en-us/data/jj591621.aspx#specific


0

2つのアプリケーションで1つのデータベースを使用した場合も、同じ問題が発生しました。disableDatabaseInitialization="true"コンテキストタイプセクションでの設定は私にとってはうまくいきます。

<entityFramework>
<providers>
  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
<contexts>
  <context type="PreferencesContext, Preferences" disableDatabaseInitialization="true">
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[PreferencesContext, Preferences], [Migrations.Configuration, Preferences]], EntityFramework" />
  </context>
</contexts>

詳細を見るhttps://msdn.microsoft.com/en-us/data/jj556606.aspx


0

カスタムコンテキスト初期化子を作成します。

public class MyDbContextInitializer : MigrateDatabaseToLatestVersion<MyDbContext, Migrations.Configuration>
{
    public override void InitializeDatabase(MyDbContext context)
    {
        bool exists = context.Database.Exists();

        base.InitializeDatabase(context);

        if (!exists)
        {         
            MyDbSeed.Seed(context);
        }
    }       
}

Migrations.Configurationは、パッケージマネージャーコンソールの移行コマンドラインによって生成されるクラスであることに注意してください。Migrations.Configurationクラスの内部修飾子をパブリック修飾子に変更する必要がある場合があります。

OmModelCreatingから登録します。

public partial class MyDbContext : DbContext
{

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer<MyDbContext>(new MyDbContextInitializer());

        //other code for creating model
    }
}

-1

ここで、コンテキストが変更されたときにモデルバッキングのエラーを防ぐ別の方法を共有したいと思います。

1)DbContextファイルを開きます

2)Microsoft.AspNet.Identity.EntityFrameworkを使用して名前空間を追加します。

3)public MyDbContext():base( "name = MyDbContext"){Database.SetInitializer(new DropCreateDatabaseAlways()); }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.