在我的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; }
答案 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; }
的记录。