我正在使用 MVC 5、Microsoft OData 2.1 和 Entity Framework 6。我尝试使用我使用 EntitySetController 类编写的 OData 源。当我添加服务引用并使用 OData 元数据时,它可以看到我的资源,但当我尝试保存它时,出现错误:
自定义工具“DataServicesCoreClientGenerator”失败。数据服务客户端代码生成失败:指定的架构无效。错误:(0,0):错误 0159:实体“...”没有定义键。定义此 EntityType 的键..#
我的 OData 元数据如下所示:
<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" Version="1.0">
<edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0">
<Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm" Namespace="WcfResearch.Entities">
<EntityType Name="vApplication">
<Property Name="ApplicationName" Type="Edm.String"/>
<Property Name="LoweredApplicationName" Type="Edm.String"/>
<Property Name="ApplicationId" Type="Edm.Guid" Nullable="false"/>
<Property Name="Description" Type="Edm.String"/>
</EntityType>
</Schema>
<Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm" Namespace="Default">
<EntityContainer Name="Container" m:IsDefaultEntityContainer="true">
<EntitySet Name="Applications" EntityType="WcfResearch.Entities.vApplication"/>
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
我尝试使用以下代码将 [Key] 属性添加到 vApplication 类:
[MetadataType(typeof(vApplicationKey))]
public partial class vApplication
{
}
public class vApplicationKey
{
[Key]
public System.Guid ApplicationId { get; set; }
}
但这并没有改变我的元数据,并且错误仍然存在。 EDMX 模型中的实体键设置为 ApplicationId。这似乎也不会影响元数据。如何获取元数据来生成带有实体键的架构,以便我可以通过服务引用在 C# 中使用它?
附:我正在消费一个视图。当我直接消费一张桌子时,它似乎起作用了。那么如何让它与视图一起使用呢?
您正在使用 ODataModelBuilder 来构建模型,对吧?如果是,请尝试以下操作:
EntityType _vApplicationKey=oDataModelBuilder.Entity<vApplicationKey>()
_vApplicationKey.HasKey(a => a.ApplicationId);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)