C# 实体框架模型第一个foregin键列

C# 实体框架模型第一个foregin键列,c#,asp.net-mvc,entity-framework,asp.net-mvc-4,foreign-key-relationship,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Foreign Key Relationship,我有3个实体(项目/产品/谈判)。 谈判实体有一个名为ReferencedId和TypeId的列,其中ReferencedId是项目和产品表的外键TypeId已定义ReferencedId属于哪个实体。 但是当我调用context.SaveChanges()时要在协商实体中插入新消息,已抛出此错误: Server Error in '/' Application. The INSERT statement conflicted with the FOREIGN KEY constraint "F

我有3个实体(
项目
/
产品
/
谈判
)。

谈判实体有一个名为
ReferencedId
TypeId
的列,其中
ReferencedId
是项目和产品表的外键
TypeId
已定义
ReferencedId
属于哪个实体。

但是当我调用
context.SaveChanges()时
要在
协商
实体中插入新消息,已抛出此错误:

Server Error in '/' Application.
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_ProjectNegotiation". The conflict occurred in database "MyMVCApp", table "dbo.Projects", column 'Id'.
The statement has been terminated. 
编辑: 这是我的模型:

如何使用1列作为协商实体的外键,并避免使用2列


谢谢。

正如你所说,这是一个概念性的问题。。你误用了外键。别这样


将协商抽象化,将ProductNegotiations和ProjectNegotiations创建为协商的子类,并在其中定义导航属性

不能将一列作为指向两个表的(正式)外键约束


您可以使用每个类型的表或每个层次结构的表映射()的一些变体来实现这一点。

您可以发布导致此异常的代码吗?也许你以前做过的一些操作。这是一个概念上的问题,我没有这方面的代码。我只是定义了一个新类,并使用实体框架保存它,然后发生了这个错误。啊,好的。对不起,那么请给我们看看实体。你能解释一下你的实体所属的数据库结构吗?上帝。你的英语。最好发布你的实体结构。所以我不能这样做?我最好为实体定义一列并设置它们之间的关系。外键不能这样做-外键有一个定义良好的目标。不,这不是更好,这是BAAAAD数据库设计。在我的数据库中,我应该为谈判桌做什么?将2列定义为外键?外键也不能为null(您可以删除引用完整性以允许此操作)。我建议(因为您首先使用模型)将协商抽象化,将ProductNegotiations和ProjectNegotiations创建为协商的子类,并在其中定义导航属性。