3

私のコードには次のものがあります:

 DbContext = new DataContext();
 DbContext.Configuration.AutoDetectChangesEnabled = false;

次に、私のコントローラーメソッドで:

// GET /api/Applications
public IEnumerable<Application> Get()
{
    return _uow.Applications.GetAll().OrderBy(p => p.Name);
}

ただし、それでも次のメッセージが表示されます。

System.InvalidOperationException was unhandled by user code
  HResult=-2146233079
  Message=The model backing the 'DataContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
  Source=EntityFramework
  StackTrace:

誰かがこれが起こっている理由を説明できますか?コンテキスト作成後の行でこのチェックが停止すると思いました。

4

3 に答える 3

9

配置できます(静的メソッドです)

Database.SetInitializer<DataContext>(null);

を最初に使用する前にDataContext。ただし、これによりオフになることに注意してください。終わり。データベースがモデルと互換性がない場合、クエリなどは失敗します。

于 2013-03-11T07:53:07.967 に答える
0

これは、エンティティ モードとデータベース スキーマに多少の違いがあるためです。エラーは、コード内の新しいモデルに従ってデータベース スキーマを更新する必要があることを示しています。

AutoDetectChangesEnabled、このエラーに関連するものではありません。取得しているエラーがデータベーススキーマの変更に関連している間、データへの変更を追跡するためです。

エラー メッセージは、コード ファーストの移行を使用して、データ モデルの変更に従ってデータベース スキーマを更新することを提案しています。

于 2013-03-11T06:39:08.533 に答える
0

2 つのオプションがあります。 1.派生した DbContext のコンストラクターに次の行を配置して

、コンテキストの Initializer を に設定します。null

Database.SetInitializer<MyContext>(null);

2.ノード内にWeb.configa を追加して、ファイル内のデータベース初期化子を無効にします。KeyappSettings

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appSettings>    
    <add key="DatabaseInitializerForType YourNamespace.YourDbContext, YourAssemblyName"
            value="Disabled" />
    </appSettings>
</configuration>

YourNamespace.YourDbContextYourAssemblyNameをアプリケーションの対応する値に置き換えます。

于 2018-11-05T01:26:35.700 に答える