2017-08-28 51 views
2

我試圖使用setValues方法將克隆的實體,但我得到了以下錯誤:如何克隆Entity Framework Core中的實體?

實體類型「TariffPeriod」的實例無法被追蹤,因爲與{「ID」相同鍵值的另一個實例}已被跟蹤。在附加現有實體時,請確保僅附加具有給定鍵值的一個實體實例。

下面是代碼:

var period2 = _tariffRepository.GetPeriodFull(period.GUID); 
var period3 = new TariffPeriod(); 
_appDbContext.TariffPeriods.Add(period3); 
_appDbContext.Entry(period3).CurrentValues.SetValues(period2); 

我看到,誤差是由於主鍵的值被複制到新的實體。那麼,如何在沒有密鑰的情況下複製這些值?

感謝您的幫助 埃裏克

+0

你可以分離period2嗎?然後將其Id設置爲Add和SetValue之間的period3? –

回答

0

您可以嘗試獲取間隔2數據的克隆和分配到period3

var values = db.Entry(period2).CurrentValues.Clone(); 
values["Id"] = 0; 
db.Entry(period3).CurrentValues.SetValues(values); 
1

複製從舊的週期值到新的週期之前修改標識,然後使用唯一值(在本例中爲主鍵)設置屬性,最後將實體添加到DbContext。

var period2 = _tariffRepository.GetPeriodFull(period.GUID); 
var period3 = new TariffPeriod(); 
_appDbContext.Entry(period3).CurrentValues.SetValues(period2); 
period3.Id = 0; 
_appDbContext.TariffPeriods.Add(period3); 
相關問題