导致验证错误的必需关联实体

时间:2019-03-28 17:38:52

标签: c# entity-framework

我有如下内容:

public class EntityA
{
    [Required]
    long? EntityBId { get; set; }

    [ForeignKey("EntityBId ")]
    public virtual EntityB { get; set; }
}

public class EntityB
{
    [Key]
    long EntityBId { get; set; }
}

当我按如下所述使用它时,由于必填属性EntityBId为空,因此我收到验证错误。

EntityA a = new EntityA();
a.EntityB = new EntityB();
dbContext.EntityAs.Add(EntityA);
dbContext.SaveChanges();

但是,如果我删除了[Required]属性,那么EntityAEntityB都会被添加到数据库中,并且EntityBId会被SaveChanges调用填充。 / p>

如何将EntityBId标记为[Required]并避免实体框架验证失败?

2 个答案:

答案 0 :(得分:0)

请参阅此链接以了解必需注释的用法:https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/data-annotations-

  

“ Required注释告诉EF特定属性是   必填。

     

将Title添加到Title属性将强制EF(和MVC)执行以下操作:   确保该属性中包含数据。”

因此,您必须决定是否要使用[Required]注释,这意味着它将不允许可为空的属性。如果您可以使用null值,请删除[Required]注释。

答案 1 :(得分:0)

可能有两种情况:

首先EntityB已存在于数据库中,并且您将EntityBId的{​​{1}}指向EntityB {{1}新EntityBId中的},如下所示,在这种情况下,仅将ForeignKey插入数据库:

EntityA

第二个EntityA在数据库中尚不存在,它将与EntityB entityB = dbContext.EntityBs.FirstOrDefault(yourCondition) EntityA entityA = new EntityA(); entityA.EntityBId = entityB.EntityBId; // <-- assign `ForeignKey` value instead of navigation property value, hence no required validation error will occur dbContext.EntityAs.Add(entityA); dbContext.SaveChanges(); 一起新插入数据库中。因此,在这种情况下,您的代码应如下所示:

EntityB

现在确定您的情况并进行相应的操作。