繁体   English   中英

惊讶实体框架正确保存了一个分离的实体

[英]Surprised that Entity Framework is saving a detached Entity correctly

我有一个实体类Timecard ,我从这个方法得到这个实体:

public Timecard GetTimeCardForPerson(long timecardId) 
{
    return timecardContext.First(item => item.TimeCardId = timeCardId);
}

TimecardContext: DbContext的类型为TimecardContext: DbContext

稍后我对“时间Timecard实体进行了更改,“时间Timecard实体具有一个属性:

public virtual ICollection<TimecardRow> TimeCardRows { get; set; }

Timecard's构造函数中将其初始化为HashSet如下所示:

this.TimeCardRows = new HashSet<TimecardRow>();

我添加了一个子TimecardRow ,然后调用了另一个方法,这是它的确切实现,并将与GetTimeCardForPerson返回的相同的GetTimeCardForPerson实例传递给它:

public void SaveTimecard(Timecard timeCard)
{
    timecardContext.Entry(timeCard).State = timeCard.TimecardId == 0
        ? EntityState.Added
        : EntityState.Unchanged;


    timecardContext.SaveChanges();
}

中通过Timecard timeCard参数不附接到timecardContext并具有TimecardId> 0。

我感到奇怪的是我的新TimecardRow作为入门(timeCard.State)设置为成功保存EntityState.Unchanged

EntityState.Unchanged告诉我的timecardContext没有任何更改,不是吗? 但都是一样的,在TimecardRow我添加插入数据库时SaveTimecard方法被调用。

EntityState.Unchanged告诉上下文, 考勤卡实体没有任何更改。

TimecardRow是EF会单独跟踪的单独实体,因此对SaveChanges的调用将插入该实体。

上面的示例假定Timecard在传递给Save方法时已经附加(如果它与从GetTimeCardForPerson方法返回的实例相同)。

如果可以使用Save方法中的Id检查来处理分离的实体和附加的实体,那么最好将状态保留为非,除非它的ID为0?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM