簡體   English   中英

從模板記錄中插入數據庫中的記錄而不更改模板-Entity Framework

[英]Insert record in database from template record without altering template - Entity Framework

我正在嘗試根據現有記錄將記錄插入到數據庫中,該記錄用作使用Entity Framework的模板。

現在的流程是:

var newModel = organization.Models.Where(m => m.IsTemplate == true).FirstOrDefault();

newModel.Name = "Something New";
newModel.IsTemplate = false;

organization.Models.Add(newModel);
_organizationRepo.SaveChanges();

請注意,事先從存儲庫中讀取organization.Models

我的問題是,模板記錄已更改,而不是使用新名稱創建新記錄且沒有臨時標志。

標准:

  • 我想創建一個新記錄,它是現有記錄的副本
  • 我想更改新記錄
  • 我不想更改現有記錄

我假設Entity Framework將解釋organization.Models.Add(newModel)語句作為插入新記錄,但事實並非如此。

該問題的解決方案是(如Arie在原始問題上的評論所述)在查找模板條目時按此處所述使用AsNoTracking()

使用此方法的一個陷阱是,此解決方法並不意味着

“讀取值(模板)->根據需要更改->插入新記錄”

而是只讀操作。 這意味着我必須手動渴望加載對模板的所有引用,以確保將這些引用包含在DataContext的Add()操作中。

我通過在保存對象之前將屬性加載到變量中來實現此目的。

var modelFromTemplate = organization.Models.FirstOrDefault(m => m.IsTemplate == true);
var eagerLoadParams = modelFromTemplate.Parameters.ToList();

//Change stuff as needed on the template here
modelFromTemplate.Name = "Something New";
modelFromTemplate.IsTemplate = false;

//Save the new model
_modelRepo.Add(modelFromTemplate);
_modelRepo.SaveChanges();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM