此问题专门针对EMS nopcommerce。当我查看EFRepository中的EF实现
时https://nopcommerce.codeplex.com/SourceControl/latest#src/Libraries/Nop.Data/EfRepository.cs
我看到有一个属性
protected virtual IDbSet<T> Entities
{
get
{
if (_entities == null)
_entities = _context.Set<T>();
return _entities;
}
}
我可以看到实体正在设置为上下文。我能看到的是如何设置参考导航属性?任何外来关系都不会被设置为上下文对吗??
答案 0 :(得分:0)
这个构造只是存储库核心成员的惰性初始化:_entities
,DbSet<T>
。无论_entities
是在那里初始化还是在存储库的构造函数中都无关紧要。它只是确保Entities
永远不会返回null。 尚未设置其他对象。
在对Entities
执行LINQ查询之前,不是实体化并附加到上下文的实体。例如
var rep = new EfRepository<Customer>();
var customers = rep.Entities.Include(c => c.Job).ToList();
现在 Customer
和他们的Job
已从数据库加载并附加到上下文。
答案 1 :(得分:0)
找到了答案!
这是因为并非我的所有属性都标记为虚拟,而我使用的是List而不是Collection。
:)