我有一个带有生成上下文的EDMX模型。 现在我生成了一个自我跟踪实体库是一个单独的项目,并从EDMX模型中引用它。 还要将上下文中的正确名称空间设置为与实体相同的名称空间。
现在使用这一切都有效,除非我尝试使用此上下文创建WCF数据服务。
所以只需创建新的ObjectContext并直接使用它就可以了。
但是在引用上下文+模型库和实体lib时,我在加载服务时遇到以下错误
服务器在处理请求时遇到错误。异常消息为'Value cannot be null. Parameter name: key'. See server logs for more details. The exception stack trace is:
现在我发现当使用外部实体lib的数据服务并且修复覆盖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>
是我得到的。
答案 0 :(得分:0)
我遇到了同样的问题(你提到的第一个问题)。我已经在这个帖子中使用了Julie Lerman的建议。另一个建议对我没有用,虽然我会更多地尝试它们,因为Julie的解决方案可能会有性能影响,因为它为每个查询执行(并且有一些成本)。
MSDN Fail to work with POCO ModelContainer which entities are located in other assembly
编辑:对不起,刚刚意识到您使用了此主题中提到的其他解决方案。