Вот тест:
WeakReference ref1;
WeakReference ref2;
TestRepositoryEntitiesContainer context;
int i = 0;
using (context = GetContext<TestRepositoryEntitiesContainer>())
{
context.ObjectMaterialized += (o, s) => i++;
var item = context.SomeEntities.Where(e => e.SomePropertyToLookupOn == "some property").First();
context.Detach(item);
ref1 = new WeakReference(item);
var newItem = new SomeEntity {SomePropertyToLookupOn = "another value"};
context.SomeEntities.AddObject(newItem);
ref2 = new WeakReference(newItem);
context.SaveChanges();
context.SomeEntities.Detach(newItem);
newItem = null;
item = null;
}
context = null;
GC.Collect();
Assert.IsFalse(ref1.IsAlive);
Assert.IsFalse(ref2.IsAlive);
Первое подтверждение прошло, второе не удалось ... Надеюсь, я что-то упустил, уже поздно ... Но похоже, что отсоединение извлеченного элемента на самом деле освободит все дескрипторы объекта, позволяя его собрать. Однако для новых объектов что-то сохраняет указатель и создает утечку памяти.
NB - это EF 4.0
Кто-нибудь видел это раньше и работал над этим?
Спасибо за вашу помощь!
Tom