如何将OData键值添加到Entity Framework类?

我正在使用MVC 5,Microsoft OData 2.1和Entity Framework 6.我正在尝试使用我使用EntitySetController类编写的OData源。 当我添加服务引用并消耗OData元数据时,它可以看到我的资源,但是当我尝试保存它时,我收到一个错误:

自定义工具“DataServicesCoreClientGenerator”失败。 数据服务客户端代码生成失败:指定的架构无效。 错误:(0,0):错误0159:实体’…’没有定义键。 定义此EntityType的键..#

我的OData元数据如下所示:

                 

我尝试使用以下代码将[Key]属性添加到vApplication类:

 [MetadataType(typeof(vApplicationKey))] public partial class vApplication { } public class vApplicationKey { [Key] public System.Guid ApplicationId { get; set; } } 

但这不会改变我的元数据,错误仍然存​​在。 EDMX模型中的实体键设置为ApplicationId。 这似乎也不会影响元数据。 如何获取元数据以生成具有实体键的模式,以便我可以使用服务引用在C#中使用它?

PS我正在消费观点。 当我直接使用表时,它似乎有效。 那么如何让它与Views一起使用呢?

您正在使用ODataModelBuilder来构建模型,对吗? 如果是,请试试这个:

 EntityType _vApplicationKey=oDataModelBuilder.Entity() _vApplicationKey.HasKey(a => a.ApplicationId); 

你可以尝试这样做:

 public class vApplicationKey { public vApplicationKey { ApplicationId = System.Guid.NewGuid(); } [Key] public System.Guid ApplicationId { get; set; } } 

在构造函数中初始化一个新的Guid。