在实体框架核心中设置包含实体的ID的最佳做法是什么

时间:2019-05-01 11:17:03

标签: entity-framework-core

假设我使用实体框架核心将以下实体存储在数据库中

public class Container{
  public int ContainerId {get; set;}
  public int ContainedId {get; set;}
  public Contained Contained {get; set;}
}

public class Contained {
  public int ContainedId {get; set;}
  public int ValueA {get; set;}
  public int ValueB {get; set;}
}

如果我决定在某个时间点保存一个Container类,并且知道一个Contained类,我应该手动设置ID吗?

var containerToSave = new Container{
  Contained = contained;
  ContainedId = contained.ContainedId
}

或者这是一个不好的做法?如果我将其ID设置为与实际类中的ID不匹配,它将保存什么?

1 个答案:

答案 0 :(得分:0)

就实体框架而言,您可以在保存主实体时指定外键或添加相关实体。

回答您的问题...不,这不是一个坏习惯,这也与EF无关。相反,您的ContainerContained匹配是与业务相关的问题,应在此处进行处理和验证。在您的情况下,EF的作用是保存数据,无论选择哪种方法。

假设您标记Contained EF会给您2个选择:

public virtual Contained Contained { get; set; }
  1. 添加外键:

    var containerToSave = new Container 
    {
        ContainedId = contained.ContainedId
    }
    
  2. 添加实体本身:

    var containerToSave = new Container 
    {
        Contained = new Contained
        {
            ValueA = x;
            ValueB = y;
        }
    }
    

在这种情况下,如果您已经添加了Contained,则可以使用第一个方法,但是不能少用,以上两种方法都可以正常工作。