2016-11-21 2 views
1

Ich habe zwei Entitäten in meinem Projekt:Kann ich meine Navigationseigenschaft im Repository-Muster für Arbeitseinheiten aktualisieren?

public class A 
{ 
    public int Id { get; set; } 
    public DateTime CreatedDateTime { get; set; }  
    public virtual B B { get; set; } 
} 


public class B 
{ 
    public int Id { get; set; } 
    public Nullable<DateTime> LastAliveTime { get; set; }  
    public virtual ICollection<A> A { get; set; } 
} 

I UOW Repository-Muster mit Entity Framework verwende ich folgendes tun:

stirng id = "abc"; 
var aService = unitOfWork.GetRepository<A>(); 
var ins = aService.FindBy(a => a.Id == id); 

Ich weiß, dass es in Ordnung ist zu aktualisieren Ins und speichern Sie die dbcontext.

Was muss ich wissen, ist:

ins.B.LastAliveTime = DateTime.UtcNow; 

wird immer diese Arbeit?

Ist es der richtige Weg zum Aktualisieren der LastAliveTime von B-Entität oder sollte ich ein anderes Repository wie unten initialisieren?

var bService = unitOfWork.GetRepository<B>(); 
+0

Warum überhaupt haben Sie Repository pro Entitätstyp? – Evk

+3

Angenommen, 'virtual' bedeutet Lazy-loading, hängt von der Lebensdauer des zugrunde liegenden Kontextes ab. Wenn der Kontext noch aktiv ist, wenn Sie "ins.B" aufrufen, oder "ins.B" bereits geladen ist, wird es funktionieren. Andernfalls erhalten Sie 'InvalidOperationException' und versuchen,' B' zu laden, wenn der Kontext entsorgt wird. – Dennis

Antwort

1

Sie brauchen nicht das zu tun.

Entweder müssen Sie eifrig laden (Include(x=>x.B)) oder lazy laden. Dann wirst du keine Probleme haben.

+0

Ich muss ein minimales Update für ein vorhandenes Projekt machen und wie @Dennis erwähnt, ab sofort funktioniert der Code, wenn mein Kontext nicht entsorgt wird, was für jetzt tun wird. –

Verwandte Themen