假设我使用实体框架核心将以下实体存储在数据库中
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不匹配,它将保存什么?
答案 0 :(得分:0)
就实体框架而言,您可以在保存主实体时指定外键或添加相关实体。
回答您的问题...不,这不是一个坏习惯,这也与EF无关。相反,您的Container
与Contained
匹配是与业务相关的问题,应在此处进行处理和验证。在您的情况下,EF的作用是保存数据,无论选择哪种方法。
假设您标记Contained
EF会给您2个选择:
public virtual Contained Contained { get; set; }
添加外键:
var containerToSave = new Container
{
ContainedId = contained.ContainedId
}
添加实体本身:
var containerToSave = new Container
{
Contained = new Contained
{
ValueA = x;
ValueB = y;
}
}
在这种情况下,如果您已经添加了Contained
,则可以使用第一个方法,但是不能少用,以上两种方法都可以正常工作。