我需要做的是這樣......爲什麼EF在分離時刪除子實體?
- 得到分貝上下文(UtilitiesContext)
- 查詢它的一些數據(看了一下目錄)
- 還拉從DB的孩子時,我拉WD的(AdditionalData)
- 處置方面
- 繼續使用實體
...
// step 1
using (var db = new UtilitiesContext(false))
{
var jsonSettings = new JsonSerializerSettings { MaxDepth = 2, ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
// step 2
var dirs = db.GetAll<WatchedDirectory>();
// step 3 (lazy load and serialize the WD and its additional data)
log.Debug(JsonConvert.SerializeObject(dirs, jsonSettings));
foreach (var d in dirs)
{
try
{
log.Debug(" Initialising monitoring for path " + d.UNCPath);
// detach the object and its data items from the db
db.Detach(d);
d.AdditionalData.ForEach(i => db.Detach(i));
// here the AdditionalData property serialises an empty array
log.Debug(JsonConvert.SerializeObject(d, jsonSettings));
// step 4 happens down here
我的問題是,我得到我想要在第一日誌輸出(行標步驟3) 再後來的數據時,我再說一遍,孩子收集不見了,我所做的只是分離的實體從上下文。
我的分離方法看起來像這樣...
public void Detach(object entity)
{
Entry(entity).State = EntityState.Detached;
}
如果你打算處理上下文,你應該先將它們映射到DTO。如果你按照你現在的路線,我相信你會有更多的問題。處理上下文作用域之外的實體對象需要解決問題。 –
我也曾考慮過......這些都是非常簡單的實體,所以我認爲這樣可以節省代碼重複 – War
我試過在過去做過類似的事情,它總是回來咬你屁股最後,現在更容易進行映射,而不是在稍後的時間點進行映射,在這些時間點你需要重新編寫大量的代碼,而這些代碼最終會讓你失望。 –