Entity Framework Core 2.0 多对多关系同一个表[重复]

2024-04-24

我在用着实体框架核心 2.0为了映射现有数据库,该数据库有两个表:Teams and SupportTeam.

团队领域:身份证号、姓名

团队支持:TeamID(团队表上的外键),支持TeamID(团队表上的外键)

我尝试将它们映射如下:

 public class Team
 {
     public int Id { get; set; }
     public string name { get; set; }

     public List<TeamSupport> SupportTeams { get; set; }

 }

 public class TeamSupport
 {
     public int TeamId { get; set; }
     public virtual Team Team { get; set; }

     public int SupportTeamId { get; set; } // In lack of better name.
     public virtual Team SupportTeam { get; set; }
 }

但是当我运行“add-migration”时出现以下错误:

无法确定导航所代表的关系 “List”类型的属性“Team.SupportTeams”。任何一个 手动配置关系,或使用忽略此属性 '[NotMapped]' 属性或使用 'EntityTypeBuilder.Ignore' 'OnModelCreating'。


The TeamSupport实体有two 参考导航属性Team(定义了两个多对一的关系TeamSupport and Team),但是Team实体只有one 收藏导航属性,因此 EF 不知道如何映射它(到Team.Team or Team.SupportTeam)并抛出有问题的异常。

在这种情况下,您必须显式解析映射。一般情况下使用就够了[InverseProperty]数据注释,但多次引用同一个表总是会导致多级联路径问题,这需要关闭一个或多个关系的删除级联。而后者只能通过流畅的配置来完成,所以最好也通过流畅的配置来完成整个映射。

您的模型现在所需的最低配置是:

modelBuilder.Entity<TeamSupport>()
    .HasOne(e => e.Team)
    .WithMany(e => e.SupportTeams);

modelBuilder.Entity<TeamSupport>()
    .HasOne(e => e.SupportTeam)
    .WithMany()
    .OnDelete(DeleteBehavior.Restrict);

请注意,由于没有相应的集合导航属性,因此第二个关系配置使用无参数WithMany过载来表明这一点。如果您决定将此类集合添加到模型中

public class Team
{
    public int Id { get; set; }
    public string name { get; set; }

    public List<TeamSupport> SupportTeams { get; set; }
    public List<TeamSupport> SupportOfTeams { get; set; } // <--
}

不要忘记在相应的映射中指定

.WithMany(e => e.SupportOfTeams)

否则 EF 将创建第三种关系。

欲了解更多信息,请参阅人际关系 https://learn.microsoft.com/en-us/ef/core/modeling/relationshipsEF Core 文档的部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Entity Framework Core 2.0 多对多关系同一个表[重复] 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 如何在列表/字符串/范围中查找指定项目后面的特定项目?

    给定一个input任何类型的序列 列表 字符串 范围 如何找到下一个项目input遵循指定项目 另外 如果该项目不存在或后面没有任何内容 该函数应该返回None 我尝试将输入类型转换为列表 然后从列表中查找位置 然后获取下一个项目 但这并不
  • 如何使用 JDBC 进行扩展插入而不构建字符串?

    我有一个应用程序可以解析日志文件并将大量数据插入数据库 它是用 Java 编写的 并通过 JDBC 与 MySQL 数据库通信 我尝试了不同的插入数据的方法 以找到适合我的特定用例的最快方法 目前看来表现最好的方法是发出扩展插入 例如 具有
  • 在 Android 锁屏上显示自定义信息 [重复]

    这个问题在这里已经有答案了 我想自定义锁屏 The default Lock screen is like this 我想修改锁定屏幕的这一部分并让所有其他内容保持不变 当用户锁定手机时 它应该在红色框中显示自定义信息 到目前为止 我已经看
  • mockk java.lang.AssertionError:验证失败:调用 1 of 1:未调用

    我正在使用模拟运行单元测试 当尝试验证方法时 我收到断言错误 并且不知道如何运行测试 这是我的测试方法 get Rule var rule TestRule InstantTaskExecutorRule val autoDownloads
  • Django 中的内联表单集 - 删除某些字段

    我需要创建一个内联表单集 a 排除一些字段MyModel完全显示出来 b 显示一些字段MyModel但阻止它们被编辑 我尝试使用下面的代码 使用values 为了将查询集过滤为我想要返回的值 然而 这失败了 有人有什么想法吗 class P
  • DataDog 事件会自动恢复

    我创建了一个事件监视器 用于捕获有错误的事件 并通过特殊的信使通知有关警报的信息 一切都很顺利 但我注意到此类警报会自行自动恢复一段时间 As I understand it is because of this parameter 因此
  • VB.NET中获取CheckBoxList的所有选中值

    我用过ASPCheckBoxList控制 现在我想要的是在VB代码中获取所有选定的值 HTML
  • 查找包含相似字符串的sql记录

    我的下表有 2 列 ID 和标题 其中包含超过 500 000 条记录 例如 ID Title 1 Aliens 2 Aliens 1986 3 Aliens vs Predator 4 Aliens 2 5 The making of A
  • 为什么java中的嵌套类与C#中的嵌套类在以下方面有所不同?

    我发现了一些类似的帖子 但找不到明确解释这一点的答案 我已经执行了类的嵌套 即 内部 类存在于 外部 类中 并尝试实例化内部类 这就是我遇到的场景 如果是 C class outside public class inside public
  • 龙目岛和吉斯注射液

    我是 lombok 和 guice 注入的新手 我可以了解一般概念 但我遇到了一些我不理解的代码 并且由于语法而无法搜索 以下是代码 有人可以帮助我理解吗 import com google inject Inject import lom
  • 如何获取 mp3 文件的封面?

    我有一个 mp3 文件 当我用 Windows Media Player 阅读它时 它有专辑的封面 所以我想知道是否有办法在 javascript 或 jQuery 中获取该封面 请访问以下网址了解更多内容 http www richard
  • ctypes 包装“MessageBoxA”示例在 python33 中不起作用

    此示例位于 python 3 3 2 文档中 http docs python org 3 library ctypes html highlight ctypes ctypes http docs python org 3 library
  • 从 /var/log/mysql 删除 mysql-bin.**** 文件

    In the var log mysql我发现有很多大文件 rw rw 1 mysql adm 104875724 Nov 16 2016 mysql bin 002982 rw rw 1 mysql adm 104900467 Nov 1
  • 使用解析连接两个表

    我在 parse com 有一个数据库 我有一堂课叫做UserDetail 在该类中 我有一个名为的数组字段occupationid 对于本专栏 我有另一个类称为Occupation其中列就像occupationid occupationn
  • Rails 3 - 带 image_tag + 文本的 link_to

    这部分代码将生成我图片 png作为链接 我需要在该图像上附加一些文本 图像 文本 我尝试了类似的操作
  • 创建多彩板

    我要创建一个多彩板 从第一个方块开始为黑色 然后是蓝色 红色和黄色 这些方块对角线填充 并且没有空的彩色方块 我知道我的算法是错误的 但我不知道如何修复它 目前 我的代码打印如下 import javax swing JFrame impo
  • ruby 中的无效函数

    为什么这个功能无效呢 def request method get resource meta strip true end 意外的 期待关键字 结束 谢谢你 在 Ruby 中 不能用可选参数包围必需参数 使用 def request re
  • 我可以创建一个网址来打开带有我定义的坐标的 3 个点(A、B、C)的谷歌地图吗?

    我可以制作一个显示 3 个或更多点的谷歌地图的网址吗 就像是https maps google com maps q 58 41 881N 152 31 324W link https maps google com maps q 58 4
  • WPF中如何聚焦ListviewItem?

    I have ListBox在我的包含十个项目的应用程序中 用户一次可以看到五个项目 有时我会从代码中选择项目并设置焦点 当项目可见时 选择项目并聚焦效果非常好Form 但对于其他不可见的项目 我无法设置焦点 注意 选择后对用户可见 有人可
  • Entity Framework Core 2.0 多对多关系同一个表[重复]

    这个问题在这里已经有答案了 我在用着实体框架核心 2 0为了映射现有数据库 该数据库有两个表 Teams and SupportTeam 团队领域 身份证号 姓名 团队支持 TeamID 团队表上的外键 支持TeamID 团队表上的外键 我