entity-framework - 为什么我的外键引用属性没有反射(reflect)外键 ID 属性值?

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

我有一个 Candidate 实体,其中包含一些关联,如下所示。我有一个没有引用属性,只有外键属性的 View 模型,并且我正在使用 AutoMapper 将 View 模型映射回实体。当我尝试保存实体时,我收到验证错误,告诉我例如标题字段是必需的。因为虽然我的 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?

最佳答案

删除[必需] 属性。无论如何,它不能保证您的 Guid 不为空,因为空的 Guid {00000000-0000-0000-0000-000000000000} 是有效的 Guid,它是有效的 uniqueidentifier数据库中的列值。 (Guid 是一个 struct,不能为 null。)您有责任设置 Guid 的正确值。因为 Guid 不可为空,所以 EF 无论如何都会根据需要检测关系。

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

context.Configuration.ValidateOnSaveEnabled = false;

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

关于entity-framework - 为什么我的外键引用属性没有反射(reflect)外键 ID 属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9787396/

相关文章:

c# - 了解代码优先虚拟属性

c# - 删除可选相关实体时如何将 FK 更新为 null

c# - Entity Framework 代码首先更新复杂类型的单个属性

c# - 如何将日历中的选定日期与数据库中的日期进行比较?

sql - 无法将 “X”上的 “Y”属性设置为 'null'值。您必须将此属性设置为 'Int32'类型的非空值

c# - Entity Framework 如何使用导航属性

entity-framework-4.1 - Entity Framework 代码优先 : FOREIGN KEY constraint may cause cycles or multiple cascade paths

asp.net - 使用默认成员关系的 MVC3 Entity Framework

asp.net-mvc-3 - 如何在 Visual Studio 2012 中使用 Entity Framework 4.1?

entity-framework - 不使用 Entity Framework 代码优先调用种子方法