1
我有一個POCO A
實體引用B
實體,比如說b
。我想A
引用一個不同的B
實體,比如說bb
。不同的現有實體的外鍵在更新引用實體時沒有被保存
這些步驟:
var b = // get existing b from somewhere out-of-context
var a = new A { B = b }
dbcontext.Set<B>.Attach(a.B);
dbcontext.Set<A>.Add(a);
context.SaveChanges();
產生a
的INSERT語句與正確設置爲b
主鍵ID的B_ID
外鍵的預期。這些後續步驟:
var bb = // get existing bb from somewhere out-of-context
a.B = bb;
differentdbcontext.Set<B>.Attach(a.B);
differentdbcontext.Set<A>.Attach(a);
differentdbcontext.Entry(a).State = EntityState.Modified;
differentdbcontext.SaveChanges();
導致持久數據無變化。如預期的那樣,更新語句不包括set B_ID = ...
。
我正在做一些簡單的錯誤,因爲我已經有過類似以前的其他場景。
我應該澄清一下,在客戶端發送'A'DTO的反序列化時,'A.B'被設置爲'bb'。因此,在使用'differentdbcontext'之前,沒有真正的賦值給'A.B'。有沒有一種明確的方式告訴EF *:*屬性在沒有做任務的情況下改變了? – Kit
@Kit:不,沒有。明確告知EF屬性已更改只支持標量屬性和複雜屬性,而不支持導航屬性/關係。這是獨立協會(=無外鍵屬性)的弱點之一,也是EF 4引入FK關聯(=暴露外鍵)的主要原因。 – Slauma
接受了答案,因爲它基本上是正確的,但我不能相信我將不得不通過EF來通過一個通用的存儲庫接口來完成這項工作。 – Kit