Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 林帕德;EF5代码优先_Entity Framework_Ef Code First_Linqpad - Fatal编程技术网

Entity framework 林帕德;EF5代码优先

Entity framework 林帕德;EF5代码优先,entity-framework,ef-code-first,linqpad,Entity Framework,Ef Code First,Linqpad,尝试对Linqpad中的dbcontext程序集运行查询时出现以下错误 InvalidOperationException:自创建数据库以来,支持“UserQuery”上下文的模型已更改。考虑使用代码第一迁移来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269) 读了一点书后,似乎: Database.SetInitializer<DiaryAssistantContext>(null); Database.SetInitiali

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

InvalidOperationException:自创建数据库以来,支持“UserQuery”上下文的模型已更改。考虑使用代码第一迁移来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)

读了一点书后,似乎:

Database.SetInitializer<DiaryAssistantContext>(null);
Database.SetInitializer(null);
这是需要的。但是,这已经存在于我的派生DbContext类中


有人能给我一个指针吗?

LINQPad将您键入的数据上下文子类化,这样您就可以在不引用实例的情况下运行查询。可能SetInitializer方法需要子类类型

如果替换此代码,会发生什么情况:

Database.SetInitializer<DiaryAssistantContext>(null);

虽然答案已经被接受,但在我的例子中,我想要一个编译时更友好的解决方案。以下解决方案类似于公认答案中使用反射的示例,但将提供一点额外的编译时检查:

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});
Expression setInitializeExpression=()=>Database.SetInitializer(null);
var setInitializerCall=(MethodCallExpression)setInitializerExpression.Body;
var setInitializeMethodInfo=
setInitializerCall.Method.GetGenericMethodDefinition().MakeGenericMethod(GetType());
调用(null,新对象[]{null});

我已经将您建议的行添加到dbcontext派生类的构造函数中,它工作得非常好。我不能完全理解为什么.GetType()是虚拟的,所以它相当于调用Database.SetInitializer(null);在LINQPad中运行时
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});