如何不需要此Code First关系

时间:2015-11-19 20:54:33

标签: entity-framework ef-code-first

在我的Code First中,我已经将外键定义为可为空。但是,当我尝试添加没有该键的记录时,我仍然会收到外键约束错误:

  

INSERT语句与FOREIGN KEY约束冲突\" FK_dbo.RequestReview_dbo.CustomForm_ReviewFormId \"。冲突发生在数据库\" Mkp \",table \" dbo.CustomForm \",column' CustomFormId'。\ r \ n该声明已终止

我应该如何定义关系以便不强制执行关键约束?

我的代码第一个模型定义了这样的字段:

[Key, ForeignKey("Resource"), DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid RequestReviewId { get; set; } // My Primary Key
public virtual Resource Resource { get; set; }

public Guid? ReviewFormId { get; set; } // Foreign Key
[ForeignKey("ReviewFormId")]
public CustomForm ReviewForm { get; set; }

(我确实尝试过搜索,但我不确定是否使用了正确的术语进行搜索。)

编辑/更新:
如果我删除ForeignKey标记,我仍然会尝试创建关系的迁移,但这次调用ReviewForm_CustomFormId。我怎么能避免这个?

模型的更新版本:

[Key, ForeignKey("Resource"), DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid RequestReviewId { get; set; } // My Primary Key
public virtual Resource Resource { get; set; }

public Guid? ReviewFormId { get; set; } // Foreign Key
public CustomForm ReviewForm { get; set; }

2 个答案:

答案 0 :(得分:0)

我看到的一个解决方案是你可以使用这个colunm ReviewFormId作为一个隐含的外键。我的意思是:不要将它定义为外键,而只是定义常规数据,只有你知道它里面的数据代表外键,但是不要告诉实体它是外键,因为GUID只是不接受可以为空的外键。

答案 1 :(得分:0)

为它提供一个单独的主键字段以及外键:

<a class = "Squirrel Tech">Need more help? Just reply.</a>

这样做我能够插入空public int ID { get; set; } public Guid? ReviewFormId { get; set; } [ForeignKey("ReviewFormId")] public CustomForm ReviewForm { get; set; } 的记录。