2016-11-21 48 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; } 
} 

我使用实体框架的工作库模式的单位,我做到以下几点:

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

我知道,这是确定以更新插入并保存dbcontext

我需要知道的是:

ins.B.LastAliveTime = DateTime.UtcNow; 
将这项工作始终

这是更新B实体的LastAliveTime的正确方法还是应该像下面初始化另一个存储库?

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

为什么根本不需要每个实体类型的存储库? – Evk

+3

假设'虚拟'表示延迟加载,它取决于底层的上下文生存期。如果上下文仍然存在,当你调用'ins.B',或者'ins.B'已经被加载时,它就会工作。否则,你会得到'InvalidOperationException',试图在处理上下文时加载'B'。 – Dennis

回答

1

不需要做这一点。

要么你必须使用急切的加载(Include(x=>x.B))或延迟加载。那么你不会有任何问题。

+0

我需要对现有项目进行最小限度的修复,正如@Dennis所提到的那样,截至目前代码正在工作,如果我的上下文没有处理,现在就可以完成。 –

相关问题