惊讶的是实体框架正确保存分离的实体

我有一个实体类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通知上下文Timecard实体没有任何更改。

TimecardRow是一个单独的实体,EF将单独跟踪,所以对SaveChanges的调用将插入该实体。

以上假定Timecard在传递给Save方法时已经连接(如果它是从GetTimeCardForPerson方法返回的同一个实例)。

如果在Save方法中使用Id检查来处理分离和连接的实体,除非它的id为0,否则最好是保持独立状态?

链接地址: http://www.djcxy.com/p/5741.html

上一篇: Surprised that Entity Framework is saving a detached Entity correctly

下一篇: How to update related data in Entity Framework 6