亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

實體框架5實體的深層復制/克隆

實體框架5實體的深層復制/克隆

嗶嗶one 2019-12-25 10:33:53
我正在使用Entity Framework 5(DBContext),并且試圖找到最好的方法來深度復制實體(即復制實體和所有相關對象),然后將新實體保存在數據庫中。我怎樣才能做到這一點?我已經研究過使用擴展方法,例如,CloneHelper但不確定是否適用于DBContext。
查看完整描述

3 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

克隆實體的一種廉價的簡便方法是執行以下操作:


var originalEntity = Context.MySet.AsNoTracking()

                             .FirstOrDefault(e => e.Id == 1);

Context.MySet.Add(originalEntity);

Context.SaveChanges();

這里的訣竅是AsNoTracking() -當您加載這樣的實體時,您的上下文不知道它,并且當您調用SaveChanges時,它將像對待新實體一樣對待它。


如果MySet有引用MyProperty并且您也想要它的副本,則只需使用Include:


var originalEntity = Context.MySet.Include("MyProperty")

                            .AsNoTracking()

                            .FirstOrDefault(e => e.Id == 1);


查看完整回答
反對 回復 2019-12-25
?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

這是另一個選擇。


在某些情況下,我更喜歡它,因為它不需要您專門運行查詢來獲取要克隆的數據。您可以使用此方法創建已經從數據庫獲得的實體的克隆。


//Get entity to be cloned

var source = Context.ExampleRows.FirstOrDefault();


//Create and add clone object to context before setting its values

var clone = new ExampleRow();

Context.ExampleRows.Add(clone);


//Copy values from source to clone

var sourceValues = Context.Entry(source).CurrentValues;

Context.Entry(clone).CurrentValues.SetValues(sourceValues);


//Change values of the copied entity

clone.ExampleProperty = "New Value";


//Insert clone with changes into database

Context.SaveChanges();

此方法將當前值從源復制到已添加的新行。


查看完整回答
反對 回復 2019-12-25
  • 3 回答
  • 0 關注
  • 524 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號