上下文
我正在关注 Entity Framework Core 中新的多对多关系建模的示例,在此处引用:
由团队在此处构建(展开 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/