我有一個實體類Timecard
,我從這個方法得到這個實體:奇怪,實體框架是節省分離實體正確
public Timecard GetTimeCardForPerson(long timecardId)
{
return timecardContext.First(item => item.TimeCardId = timeCardId);
}
timecardContext是TimecardContext: DbContext
型。
後來我做出改變的Timecard
實體,該Timecard
實體有一個屬性:
public virtual ICollection<TimecardRow> TimeCardRows { get; set; }
被初始化,在Timecard's
構造爲HashSet
,像這樣:
this.TimeCardRows = new HashSet<TimecardRow>();
我添加一個孩子TimecardRow
然後我調用另一個方法,這是它的確切實現,並將其從同一個Timecard實例傳遞給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沒有什麼改變,不是嗎?但是完全相同,當調用SaveTimecard
方法時,我添加的TimecardRow
被插入到數據庫中。
是否將TimeCard實例從GetTimeCardForPerson中返回,這是您隨後對SaveTimecard進行更改並傳遞給SaveTimecard的同一實例? – thudbutt
@thudbutt它是相同的Timecard實例,感謝您的幫助 –