c# - 跳过导航没有定义外键

标签 c# macos entity-framework-core many-to-many ef-core-5.0

上下文

我正在关注 Entity Framework Core 中新的多对多关系建模的示例,在此处引用:

https://learn.microsoft.com/en-us/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-simple-key%2Csimple-key#many-to-many

由团队在此处构建(展开 2020 年 7 月 23 日的帖子):https://github.com/dotnet/efcore/issues/19549

我已经通过一个新的 .NET Web API 项目完成了这项工作——唯一的变化是在我的模型中我使用的是 Staff 和 Team 对象,而不是示例中的 Post 和 Tag 对象。

我的设置

  • macOS 10.15.7 (卡特琳娜)
  • .NET 框架 5.0.101
  • EF 版本 5.0.1

问题

当我运行迁移时,EF 在生成的 SQL 代码中创建查找表,如文档所述,即使没有定义查找对象。这太棒了。

但是,在我应用 SQL 更改并运行应用程序后,当我访问 API 端点时,我收到一条错误消息:

跳过导航“Staff.Teams”没有定义外键。

我对此感到困惑,因为示例没有在其模型中定义外键。

我环顾四周,但没有找到类似的问题。

想知道这是否是 macOS 上 .NET 的问题。

谢谢。

最佳答案

最好分享您的模型和配置(如果存在)。 但完全可以按照约定(无需配置)在 ef 5 中设置多对多关系。您只需要在每个实体中设置 Collection,然后 ef 会自动为此关系创建第三个表。
因为你有not defined foreign key,我猜你设置了配置。我只能分享示例,希望对您有所帮助。

// MODEL
namespace EFConfiguration.Core.Domain.Relations
{
    public class Course
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Tag> Tags { get; set; }
    }

    public class Tag
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Course> Courses { get; set; }
    }

    public class CourseTag
    {
        public int CourseId { get; set; }
        public int TagId { get; set; }
        public Course Courses { get; set; }
        public Tag Tag { get; set; }
    }
}

和配置:

// CONFIG
public class CourseConfig : IEntityTypeConfiguration<Course>
{
    public void Configure(EntityTypeBuilder<Course> builder)
    {
        builder.HasMany(x => x.Tags).WithMany(x => x.Courses)
            .UsingEntity<CourseTag>(
            r => r.HasOne(x => x.Tag).WithMany().HasForeignKey(x => x.TagId),
            l => l.HasOne(x => x.Courses).WithMany().HasForeignKey(x => x.CourseId)); 
    }
}

关于c# - 跳过导航没有定义外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65283519/

相关文章:

c# - 使 Entity Framework (使用 Linq 查询)使用自定义字段的别名而不是重做子查询

c# - 从照片中获取 Exif 信息

c# - 如何自动将版本号插入 AssemblyName

c# - 使用dll导入

python - 在 Mac OS X 上用 Python 截图

linux - 通过 SSH 服务器获取 SCP 到本地的权限被拒绝

cocoa - NSButtonCell 与 NSButton

c# - 在 EF7(核心)OnModelCreating 中使用自定义属性

c# - 值不能为空。参数名称 : entitySet

sqlite - 使用 SQLite.Core 使用密码连接到数据库