gpt4 book ai didi

c# - 元数据异常 : Schema specified is not valid when using ExecuteStoreQuery in Release configuration

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:08 36 4
gpt4 key购买 nike

我在使用 ExecuteStoreQuery 时遇到以下异常 检索当前数据库日期:

The types in the assembly 'XYZ' cannot be loaded because the assembly contains
the EdmSchemaAttribute, and the closure of types is being loaded by name.
Loading by both name and attribute is not allowed.
at System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(
ObjectItemCollection objectItemCollection, Assembly assembly,
Boolean loadReferencedAssemblies, EdmItemCollection edmItemCollection,
Action`1 logLoadMessage)
at System.Data.Metadata.Edm.MetadataWorkspace.ImplicitLoadAssemblyForType(
Type type, Assembly callingAssembly)
at System.Data.Objects.ObjectContext.ExecuteStoreQueryInternal[TElement](
String commandText, String entitySetName, MergeOption mergeOption,
Object[] parameters)
at (my method)

有问题的方法包含

var timestamp = context.ExecuteStoreQuery<DateTime>("SELECT GetDate() ").First();

我之前使用过规范函数 CurrentDateTime,但这也在调试配置中导致了此异常。 现在它只在发布配置中抛出

我发现这个确切的异常只被提到过几次,主要是它与在一个程序集中混合代码优先和数据库优先方法有关,我相信我已经在我的案例中排除了这种情况。

生成的代码确实包含

[assembly: EdmSchemaAttribute()]

但我不知道是哪种类型导致了这种情况 - 我不知道也不知道如何找到它们。

如果我只使用 LINQ to Entities,它似乎一切正常。

目前,我依赖我们的服务器时间同步并且根本不查询数据库时间 - 不推荐这样做,但遗憾的是,这不是我们代码库中依赖它的第一件事。

以及问题:

代码生成器包含上述属性的原因可能是什么?我怎样才能防止这种情况发生?什么是合理的解决方法(导入包含 SELECT GetDate() 的存储过程似乎有点矫枉过正)?还有为什么这只发生在发布配置中?我没有找到有关基于编译器符号和选项的 EF 优化/差异的信息...

最佳答案

历史上(在 EF1 中)EF 只能使用从 EntityObject 类派生的实体并具有无数属性 - 例如每个实体都必须有 EdmEntityType 属性,每个属性都必须有 EdmProperty 属性等等。包含实体的程序集必须具有 EdmSchemaAttribute。加载类型时,EF 会查找 EdmSchemaAttribute,如果找到它,它就会知道此程序集包含需要加载的基于 EntityObject 的实体。在 EF4 中,添加了对 POCO 类型的支持。现在,您不再需要按照约定让任何属性和类型与您的模型相匹配。但是,限制是您不能混合使用 POCO 和非 POCO 类型(因此会出现异常)。 VS2008 SP1 和 VS2010 中的默认代码生成器生成基于 EntityObject 的实体和基于 ObjectContext 的上下文。存在非 POCO 实体,为了使 EF 能够找到它们,添加了 EdmSchemaAttribute。在 VS2012 中,默认生成 POCO 实体并且不生成 EdmSchemaAttribute(它实际上会阻止查找 POCO 实体)。最后,VS 代码库上有适用于 VS2010 的 T4 模板,您可以使用它从设计器生成 POCO 实体。您只需将模板添加到您的项目,并在设计器中将“代码生成策略”从“默认”更改为“无”。

关于c# - 元数据异常 : Schema specified is not valid when using ExecuteStoreQuery in Release configuration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15783159/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com