【发布时间】:2016-11-21 09:04:12
【问题描述】:
我的项目中有两个实体:
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);
我知道更新 ins 并保存 dbcontext 是可以的。
我需要知道的是:
ins.B.LastAliveTime = DateTime.UtcNow;
这会一直有效吗?
这是更新 B 实体的 LastAliveTime 的正确方法还是应该像下面这样初始化另一个存储库?
var bService = unitOfWork.GetRepository<B>();
【问题讨论】:
-
为什么要为每个实体类型提供存储库?
-
假设
virtual表示延迟加载,它取决于底层上下文生命周期。如果上下文仍然存在,当您调用ins.B,或者ins.B已经加载时,它将起作用。否则你会得到InvalidOperationException,试图在上下文被释放时加载B。
标签: c# asp.net entity-framework asp.net-web-api unit-of-work