2011-11-25 63 views
0

我有導航屬性CvssVector的Vulner實體。 LazyLoad已啓用。 CvssVector具有主鍵列VulnerId(不是標識)。從上下文中刪除所有對象後,導航屬性不起作用

var vulner = new Vulner { CvssVector == cvssVector}; 
context.Vulners.Add(vulner); 
context.SaveChanges(); 
savedVulnerId = vulner.Id; 
var entries = context.ObjectStateManager.GetObjectStateEntries(~EntityState.Detached).ToList(); 
entries.ForEach(e => e.ChangeState(EntityState.Detached)); // remove all entry states 

後來針對同一方面,我要求保存vulner

var vulner = context.Vulners.First(v => v == savedVulnerId); 
var fail = vulner.Cvss == null && ctx.CvssVectors.Any(x => x.VulnerId == vulner.Id); 

你猜怎麼着? 失敗等於真! 唯一的問題是爲什麼?

回答

0

隨着更改實體狀態,您只能更改從上下文跟蹤對象的方式。但是,然後查詢ctx.CvssVectors,您將轉到仍包含數據的數據庫。

想要刪除數據或您的場景是什麼?

+0

據我瞭解,當我更改實體的狀態爲分離時,它將從上下文中刪除(不刪除表單數據庫,我不需要它)。無論如何,當我要求實體EF應該爲它分貝,特別是如果它無法在本地緩存中找到它。 EF返回Vulner但沒有CvssVector。 –