为什么我的外键引用属性不反映外键ID属性值?

时间:2012-03-20 13:08:43

标签: entity-framework entity-framework-4.1 ef-code-first

我有一个Candidate实体,下面有一些关联示例。我有一个视图模型没有引用属性,只有外键属性,我使用AutoMapper将视图模型映射回实体。当我尝试保存实体时,我收到验证错误,告诉我例如标题字段是必需的。因为虽然我的TitleId具有有效值,但Title仍为空。

public class Candidate
{
...
    [Required]
    public string RefNum { get; set; }

    [ForeignKey("TitleId")]
    [Required]
    public Title Title { get; set; }
    public Guid TitleId { get; set; }
...
}

PS,我可以看到Required属性在这里是如何引起麻烦的,但是我怎么坚持TitleId必须是一个有效的ID,而不仅仅是一个空的Guid?

1 个答案:

答案 0 :(得分:3)

删除[Required]属性。它无法保证您的Guid不为空,因为空Guid {00000000-0000-0000-0000-000000000000}是有效的Guid,它是数据库中有效的uniqueidentifier列值。 (Guidstruct,不能是null。)您有责任设置Guid的正确值。由于Guid不可为空,EF无论如何都会检测到这种关系。

或者,您也可以关闭上下文实例的验证...

context.Configuration.ValidateOnSaveEnabled = false;

...以避免错误。您还可以在Fluent API(HasRequired/WithRequired)中配置映射,而不是使用数据注释来避免验证错误。