我刚刚升级到 .net 4.5 去更新我的 WCF 客户端项目中的 OData 服务参考,我得到了这个自定义工具错误:
指定的架构无效。错误:(0,0) :error 0111:: 依赖角色 Bill 引用的属性必须是关系 BillingEntities.FK_Bill_Batch_BatchId 的引用约束中的依赖角色引用的 EntityType BillingEntities.Bill 的键的子集。
关于如何解决这个问题的任何想法?
我很确定这是 WCF 数据服务而不是实体框架的问题。我在我的环境中复制了这个。我发现 EDMX CSDL 命名空间在版本之间是不同的。
2.0 EDMX 设计器 xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx" WCF 服务 $metadata - xmlns="http://schemas.microsoft.com/ado/2008/09/电火花"
3.0 EDMX 设计器 - xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx" WCF 服务 $metadata - xmlns="http://schemas.microsoft.com/ado/2007/05 /edm"
如您所见,3.0 定义了一个比 2.0 明显更新的 edm 版本,但由 WCF 数据服务作为 2007 年的降级版本发布。
我的结论是 GAC 4.5 中附带的 System.Data.Services.dll 存在支持此问题的问题。由于 WCF 数据服务从 4.5 开始分拆为 NuGet,因此我将切换到此版本。我在我的环境中尝试过这个,服务发布的 CSDL 是正确的,并且可以被我的服务客户端使用。
如果无法升级,则必须使用 4.0 中的 EDMX 设计器或在幕后手动切换这些标签,这就是我最初的工作方式。
这很可能与使用与 .Net 4.5 中现在可用的不同版本的实体框架构建的模型有关。这本身不是问题,但它可能意味着实体关联可能没有创建外键属性。
您从哪个版本的框架升级?
您可以选择从头开始删除并重新创建模型(取决于复杂性),或者您可以从现有数据库重新创建模型,特别注意关联。
当我发现 .Net 4.5 不能在 Windows Server 2003 上运行并且不得不降级到 4.0 并且再次从 .net 3.5 升级到 .net 4.0 时,我遇到了类似的情况。我确实不得不重新创建模型。使用 EF 4.4 而不是从 .Net 4.5 获得的 5.0