我有两个实体
public class Datatype
{
[Key]
public int Id { get; set; }
[StringLength(96)]
public string DataTypeName { get; set; }
}
public class Attribute
{
[Key]
public int Id { get; set; }
[StringLength(96)]
public string Attribute_Name { get; set; }
[ForeignKey("Datatype")]
public int? DatatypeId { get; set; }
public virtual Datatype Datatype { get; set; }
}
在DataBase Initialize中我有这段代码
Datatype dt = new Datatype();
dt.DataTypeName = "text";
context.datatypes.Add(dt);
//Above code is working fine. And After execution I can see
//in records a row.. with id=1 and datatype=text
Attribute at = new Attribute();
at.Attribute_Name = "Description";
//at.DatatypeId = 1; But if I uncomment this line
context.attributes.Add(at); // Then This Gives Following Error
The INSERT statement conflicted with the FOREIGN KEY constraint
"FK_dbo.Attributes_dbo.Datatypes_DatatypeId". The conflict occurred in database
"dyescan", table "dbo.Datatypes", column 'Id'
答案 0 :(得分:1)
假设上述代码在两个对象中的任何一个保存到数据库之前执行,那么它将无法正常工作,因为您的对象'dt'在保存到数据库之前不会有ID为1,因此您不能与'1'上的属性关联!
相反,您不应该设置'DatatypeId',而只需设置'数据类型',如下所示:
at.Datatype = dt;
这将使实体框架能够确定调用savechanges时关联的实际外键应该是什么。