[英]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.