C# 添加两个FK相互指向的实体

C# 添加两个FK相互指向的实体,c#,asp.net-mvc,linq-to-sql,entity-framework,linq-to-entities,C#,Asp.net Mvc,Linq To Sql,Entity Framework,Linq To Entities,我的申请表中有两个表格。第一个部分存储在线出版物特定部分的内容。其中包含(除其他外)节标题和字段CurrentRevisionId(FK) 第二个表“修订版”存储该内容的不同修订版。它有PK RevisionId字段(上面的FK,用于表示当前修订)、HTML内容本身和SectionId(FK),指定修订所属的节 所以基本上我有两个相互指向的FK。创建新节时,子实体CurrentRevision也会填充该内容。但是InsertOnSubmit失败,出现以下错误: INSERT语句与外键约束“FK_

我的申请表中有两个表格。第一个部分存储在线出版物特定部分的内容。其中包含(除其他外)节标题和字段CurrentRevisionId(FK)

第二个表“修订版”存储该内容的不同修订版。它有PK RevisionId字段(上面的FK,用于表示当前修订)、HTML内容本身和SectionId(FK),指定修订所属的节

所以基本上我有两个相互指向的FK。创建新节时,子实体CurrentRevision也会填充该内容。但是InsertOnSubmit失败,出现以下错误:

INSERT语句与外键约束“FK_Sections_Revisions”冲突。冲突发生在数据库“xxxx”、表“xxxx.Sections”、列“SectionID”中。声明已终止

我的猜测是,它不能同时创建两行并用彼此的PK填充它们

我应该先插入小节,然后插入修订版(连同小节的主键),然后用修订版主键更新小节吗?还是有更好/更优雅的解决方案

编辑:我附上了两个表及其关系的屏幕盖。每个部分都有许多修订(修订表中的FK SectionID)。此外,还有一种一对一的关系,其中部分中的CurrentRevisionId字段指向“当前”版本。这个“当前”版本是应用程序从中提取HTML的地方。希望这能把事情弄清楚一点


两个表中的FK不能相互指向;这毫无意义


如果试图对多对多关系建模,则需要在两个表之间创建映射表。它将包含(至少)两个外键,两个表主键各一个。

两个表中的FK不能相互指向;这毫无意义


如果试图对多对多关系建模,则需要在两个表之间创建映射表。它将包含(至少)两个外键,两个表主键各一个。

如果修订内容存储在修订表中,则我认为不需要在节表中包含修订ID字段

当为同一节创建不同的修订时,可以将新行添加到修订表中,其中FK(SectionID)引用节表

节:节ID(主键)|节数据


修订:修订ID(PK)|章节ID(FK)|修订数据…

如果修订内容存储在修订表中,则我不需要在章节表中包含修订ID字段

当为同一节创建不同的修订时,可以将新行添加到修订表中,其中FK(SectionID)引用节表

节:节ID(主键)|节数据


修订:RevisionID(PK)<强>分段ID(FK)< /强>修订数据…< /P>只是一个建议,考虑添加一个模型的CurnCAP,将使每个人的生活变得更容易。因为我不明白从纯数据库的角度(更不用说EF)这是如何工作的。这是1-1还是1 *,或者可能是很多很多?@ RPM1984,谢谢你的建议,我添加了ScRunAP和一些关系的澄清:只是一个建议,考虑添加一个你的模型的点击,将使每个人的生活更容易。因为我不明白从纯数据库的角度(更不用说EF)这是如何工作的。这是1-1还是1-*,或者可能是很多?@RPM1984,谢谢你的建议,我添加了屏幕盖并澄清了一些关系:)是的,这就是我想要表达的意思。在这一点上,如果您创建的连接表中只有FK,EF甚至不需要将其映射为一个实体,它足够聪明,可以“感知”连接表,而无需显式地映射模型中的实体。酷。想了想,我同意这两个FK没有多大意义。然而,我不认为这是一种多对多的关系。每个部分都有许多修订,因此我将FK放入修订中。然而,其中一个需要是“当前的”。也许我应该在修订中放置一个位字段来标识当前的一个?这将允许我删除节中的FK,而是使用一个公共方法GetCurrentRevision,它返回Section.Revisions.First(r=>r.IsCurrent)?这是一个更好的方法吗?@Colin O'Dell-你的第一步是确定多样性。如果你说“每个部分都有很多修订版”,那么修订版应该有一个FK to部分。节不应具有任何修订的可见性。是-要获取“CurrentRevision”(如果current是“最新”版本),它应该是对节的修订集的最大操作。啊,好的。基本上,我已经确定了多重性,并正确地添加了FK。然而,我在分配/确定当前版本时采取了错误的方法。不过,我认为我需要在修订中使用一个小字段,因为我的应用程序要求用户在上线前提交新的“潜在”修订供批准(因此MAX在这种特定情况下不会工作,尽管我确实理解你们的逻辑。)感谢你们两位的帮助!是的,这就是我想说的。在这一点上,如果您创建的连接表中只有FK,EF甚至不需要将其映射为一个实体,它足够聪明,可以“感知”连接表,而无需显式地映射模型中的实体。酷。想了想,我同意这两个FK没有多大意义。然而,我不认为这是一种多对多的关系。每个部分都有很多修改,所以我把FK放进去了