2016-11-21 5 views
1

У меня есть два лица, в моем проекте:Могу ли я обновить свойство навигации в шаблоне репозитория рабочей единицы?

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; } 
} 

Я использую блок шаблона работы хранилища с Entity Framework и я делаю следующее:

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

Я знаю, что это нормально, чтобы обновить ins и сохранить dbcontext.

Что мне нужно знать:

ins.B.LastAliveTime = DateTime.UtcNow; 
Будет ли эта работа всегда

?

Это правильный способ обновления LastAliveTime объекта B или я должен инициализировать другой репозиторий, как показано ниже?

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

Почему вообще у вас есть репозиторий на тип сущности? – Evk

+3

Предполагая, что 'virtual' означает lazy-load, это зависит от основного жизненного цикла. Если контекст все еще жив, когда вы вызываете 'ins.B', или' ins.B' уже загружен, он будет работать. В противном случае вы получите 'InvalidOperationException', пытаясь загрузить' B', когда контекст будет удален. – Dennis

ответ

1

Вы не нужно делать это.

Либо вы должны использовать активную загрузку (Include(x=>x.B)), либо ленивую загрузку. Тогда у вас не будет никаких проблем.

+0

Мне нужно сделать минимальное исправление в существующем проекте, и, как отметил @Dennis, на данный момент код работает, если мой контекст не настроен, что будет делать сейчас. –