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 优化/差异的信息......