首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有ASP.NET控制器的OData核心Web需要使用fluent API作为复合密钥

带有ASP.NET控制器的OData核心Web需要使用fluent API作为复合密钥
EN

Stack Overflow用户
提问于 2020-08-28 11:04:37
回答 1查看 471关注 0票数 1

我有一个现有的API,现在它使用的数据库中有表,这些表必须有一个复合键。我使用fluent API来定义dbcontext中的键。

代码语言:javascript
运行
复制
protected override void OnModelCreating(ModelBuilder modelBuilder)
     {
        //relationship modeling
        modelBuilder.Entity<Reports>().HasMany(r => r.Screenshots).WithOne().HasForeignKey(r => new { r.ReportId, r.itemTypeId });
        modelBuilder.Entity<Images>().HasOne(s => s.Reports).WithMany(s => s.Screenshots).HasForeignKey(s => new { s.ReportId, s.itemTypeId });
        modelBuilder.Entity<EpicReportsChildList>().HasOne(e => e.Reports).WithMany(e => e.EpicReports).HasForeignKey(e => new { e.TemplateId, e.parentTypeId });
        modelBuilder.Entity<Images>().HasOne(s => s.EpicReports).WithMany(s => s.Screenshots).HasForeignKey(s => new { s.ReportId, s.itemTypeId });

        
    }

我有下面的启动文件:

代码语言:javascript
运行
复制
private IEdmModel GetEdmModel()
    {
        var oDatabuilder = new ODataConventionModelBuilder();
        oDatabuilder.EntitySet<Reports>("reports");

        return oDatabuilder.GetEdmModel();
    }

API返回以下错误:

实体类型EpicReportsChildList具有用数据注释定义的复合主键。若要设置复合主键,请使用fluent API。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-30 02:03:20

实体类型EpicReportsChildList具有用数据注释定义的复合主键。若要设置复合主键,请使用fluent API。

正如错误消息所述,也许您正在使用数据注释或fluent API方法配置复合主键。

EF核心密钥文件中,我们可以发现:组合键只能使用Fluent API进行配置;约定永远不会设置复合键,也不能使用数据注释来配置.

因此,请检查相关模型并尝试删除数据注释:[Key]属性或[ForeignKey] attibute。

有关使用组合键配置关系的更多详细信息,您可以查看以下文章(将多到多个关系连接表配置为使用复合主键,您可以参考它们):

EF一对多对组合主键的部分

在实体框架核心中配置多到多关系

在实体框架核心中配置多个关系

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63632558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档