尝试在Linqpad中对dbcontext程序集运行查询时出现以下错误。
InvalidOperationException:自创建数据库以来,支持“UserQuery”上下文的模型已更改。请考虑使用“代码优先迁移”来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
做了一些阅读后,似乎:
Database.SetInitializer<DiaryAssistantContext>(null);
是必需的。但是,这已经在我的派生DbContext类中。
有人可以给我一个指针吗?
答案 0 :(得分:10)
LINQPad是您键入的数据上下文的子类,因此您可以在不引用实例的情况下运行查询。也许SetInitializer方法需要子类型。
如果替换此代码会发生什么:
Database.SetInitializer<DiaryAssistantContext>(null);
用这个:
typeof (Database).GetMethod ("SetInitializer").MakeGenericMethod (GetType()).Invoke (null, new object[] { null });
答案 1 :(得分: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});