【发布时间】:2010-12-02 16:36:16
【问题描述】:
我有一个带有生成上下文的 EDMX 模型。 现在我生成了一个自我跟踪实体库,它是一个单独的项目,并从 EDMX 模型中引用了它。 还要将上下文中正确的命名空间设置为与实体相同的命名空间。
除了我尝试使用此上下文创建 WCF 数据服务时,现在一切正常。
所以只需创建新的 ObjectContext 并直接使用它就可以了。
但是在引用了上下文 + 模型库和实体库后,加载服务时出现以下错误
服务器在处理请求时遇到错误。异常消息为'Value cannot be null. Parameter name: key'. See server logs for more details. The exception stack trace is:
现在我发现当使用带有外部实体库的数据服务和修复覆盖 createcontext 时可能会发生这种情况
有代码
折叠
System.Data.Metadata.Edm.ItemCollection itemCollection;
if (!context.MetadataWorkspace.TryGetItemCollection
(System.Data.Metadata.Edm.DataSpace.CSSpace, out itemCollection))
{
var tracestring = context.CreateQuery<ClientDataStoreContainer>("ClientDataStoreContainer.DataSet").ToTraceString();
}
return context;
现在错误消失了,但我得到了下一个错误,那就是:
Object mapping could not be found for Type with identity 'ClientDataStoreEntities.Data'.
这个错误发生在createcontext中的.toTraceString上
ssdl 文件具有定义的类型 折叠
<EntitySetMapping Name="DataSet">
<EntityTypeMapping TypeName="IsTypeOf(ClientDataStoreEntities.Data)">
所以它必须加载 ClientDataStoreEntities.Data 类型,这是我从模型生成的 STE 库的命名空间和类型。
编辑:用
var tracestring = context.CreateQuery<Data>("ClientDataStoreContainer.DataSet").ToTraceString();
它似乎确实加载了所有类型,但是现在该服务没有我可以调用的任何方法。 应该有 2 个 DataSet 和 PublishedDataSet 但是:
<service xml:base="http://localhost:1377/WcfDataService1.svc/">
−
<workspace>
<atom:title>Default</atom:title>
</workspace>
</service>
是我得到的。
【问题讨论】: