EF Core Code First复合键配置异常:实体集提示无键定义报错
问题分析与解决
混合string与Guid类型作为复合键本身完全没问题,EF Core和OData都支持不同类型属性组成的复合键,你的报错原因不在键的类型上。
从你的代码看,已经通过数据注解([Key])和EF Core的Fluent API配置了复合键,但OData的模型构建器没正确识别到这些配置。ODataConventionModelBuilder的约定扫描有时候不会自动同步EF Core的Fluent配置,或者在某些情况下对多个[Key]注解的识别有延迟。
解决方法
直接在OData模型构建时显式指定复合键,不要依赖自动约定:
public static IEdmModel GetEdmModel() { ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); // 先获取实体类型配置,显式设置复合键 var userDocsEntity = builder.EntityType<UserDocuments>(); userDocsEntity.HasKey(u => new { u.UserID, u.DocumentID }); // 再创建实体集 builder.EntitySet<UserDocuments>("UserDocuments"); return builder.GetEdmModel(); }
另外可以做两个验证:
- 确认
[Key]特性来自System.ComponentModel.DataAnnotations命名空间,不要引用了其他库的同名特性。 - 先测试EF Core本身是否能识别复合键:比如生成迁移、尝试查询数据,如果EF Core能正常工作,说明问题确实出在OData模型配置上。
内容的提问来源于stack exchange,提问作者Razzupaltuff
相关产品推荐
相关产品推荐

