如何将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。