9

尝试对 Linqpad 中的 dbcontext 程序集运行查询时出现以下错误。

InvalidOperationException:支持“UserQuery”上下文的模型自数据库创建以来已更改。考虑使用 Code First 迁移来更新数据库 (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 回答