9

Linqpadのdbcontextアセンブリに対してクエリを実行しようとすると、次のエラーが発生します。

InvalidOperationException:データベースが作成されてから、「UserQuery」コンテキストをサポートするモデルが変更されました。Code First Migrationsを使用してデータベースを更新することを検討してください(http://go.microsoft.com/fwlink/?LinkId=238269)。

少し読んだら、次のようになります。

Database.SetInitializer<DiaryAssistantContext>(null);

が必要です。ただし、これはすでに私の派生DbContextクラスにあります。

誰かが私にポインターを与えることができますか?

4

2 に答える 2

10

LINQPad は型指定されたデータ コンテキストをサブクラス化するため、インスタンスを参照せずにクエリを実行できます。SetInitializer メソッドには、サブクラス化された型が必要な場合があります。

このコードを置き換えるとどうなりますか:

Database.SetInitializer<DiaryAssistantContext>(null);

これとともに:

typeof (Database).GetMethod ("SetInitializer").MakeGenericMethod (GetType()).Invoke (null, new object[] { null });

?

于 2012-08-30T05:01:22.867 に答える
6

回答はすでに受け入れられていますが、私の場合は、コンパイル時にもう少し使いやすいソリューションが必要でした。次の解決策は、リフレクションを使用する受け入れられた回答の例に似ていますが、コンパイル時のチェックを少し追加します。

Expression<Action> setInitializerExpression = () => Database.SetInitializer<MyContext>(null);
var setInitializerCall = (MethodCallExpression) setInitializerExpression.Body;
var setInitializerMethodInfo =
    setInitializerCall.Method.GetGenericMethodDefinition().MakeGenericMethod(GetType());
setInitializerMethodInfo.Invoke(null, new object[] {null});
于 2013-02-19T19:56:51.530 に答える