【发布时间】:2020-05-19 14:36:05
【问题描述】:
我遇到的问题很简单,但我的思维停止了工作。对不起,如果我的问题很愚蠢,但我对数据库不太擅长(我也不擅长 EFCore)。
我想要以下表格:
简历:带有 ID 和姓名/职务(字符串)
技能:带有 ID 和姓名/职务(字符串)
SkillsCV:带 ID、CvID(CV 中记录的外键)、SkillID(Skills 中记录的外键)
我不想在 CVs 和 Skills 表中有 SkillsCV 的外键。是否可以? .NET Core 是否有可能,更重要的是 Fluent API? 我对 FluentAPI 做了一个小研究,两端都有外键,是一对一的关系。需要这个吗?顺便说一句,这是一对一的关系,对吧?我不想让一方知道另一方。这就是所谓的 0 到 1,还是完全不同的东西?我真的很困惑。
所以我在 FluentAPI 中看到的一对一关系,我需要以下代码:
modelBuilder.Entity<Skill>()
.HasOne(skill => skill.SkillCV) // but I don't have a SkillCV object in Skill model
.WithOne(skillCV => skillCV.Skill) // I have skillCV.Skill
.HasForeignKey<SkillCV>(skillCV => skillCV.SkillID); // I have this foreign key in skillCV as well
但我不想在 Skills 表中有一个对象(或外键)(因为我不希望在 CVs 表中有这样的对象)。 这可能吗?我肯定做错了什么。 你能帮我找出我的错误(如果有的话)吗?
如果您知道更好的方法,请分享。提前致谢!
编辑:我想要创建的快速示例:
简历表:
ID、姓名
1“CV1”
2“CV2”
3“CV3”
技能表:
ID、姓名
1“C#”
2“Java”
3“蟒蛇”
SkillsCV 表:
ID、CvID、SkillID
1 1 1
2 1 3
3 2 1
这是解决这个问题的好方法吗?我还没有创建 SkillsCVs 表,现在我只有 CVs 和 Skills(每个技能都有一个 CV_ID),但是当我需要在前端填充一个选择框时,我需要从 API 返回 DISTINCT Skills(因为有 800 个 C# 例如不同 CV 的记录)。我认为 SkillsCVs 表可以解决这个问题,但我现在不完全确定:D
【问题讨论】:
-
据我了解,您不想在两个表中的任何一个中使用该列,所以我能想到的唯一解决方案是第三个表,其中您将 cv id 与技能 id 链接.这是唯一的方法,这是您需要的吗?
-
@Diego658 我想要 3 张表(在我的问题的顶部):CVs、Skills、SkillsCV。所以,我有第三张表,其中有其他表的 2 个外键。我想在 SkillsCV 中引用 Skills 表,而在 Skills 中没有 SkillsCV 引用。一个非常快速的例子: Skills 表有以下记录: 1 C#; 2爪哇; 3 Python,在 CV 中我们有 1 CV1、2 CV2、3 CV3 - 然后我想要具有以下记录的 SkillsCV:1 CV1 1(即 C#); 2 CV1 3(即 Python); 3 CV2 1(即C#)等......
-
为什么说是一对一的关系呢?它似乎是 CVs 和 Skills 之间的 M 对 N 关系,SkillCVs 是它的中间表。
-
我现在得到你的模型。因此,许多 CVSkill 对应一份 CV,一份 CVSkill 对应一项技能。但在您的示例中,您在两个不同的 CV 中显示 Skill id 1...
-
然后只需要一个多对多模型。您可以使用关联表为每个案例添加所需的附加信息。
标签: c# database entity-framework .net-core entity-framework-core-3.1