C# 附加参考导航属性-Nopcommerce

C# 附加参考导航属性-Nopcommerce,c#,entity-framework,nopcommerce,C#,Entity Framework,Nopcommerce,这个问题是专门针对电子商务的。当我在eForepository中查看EF实现时 我看到有一处房产 protected virtual IDbSet<T> Entities { get { if (_entities == null) _entities = _context.Set<T>(); return _entities;

这个问题是专门针对电子商务的。当我在eForepository中查看EF实现时

我看到有一处房产

    protected virtual IDbSet<T> Entities
    {
        get
        {
            if (_entities == null)
                _entities = _context.Set<T>();
            return _entities;
        }
    }
受保护的虚拟IDbSet实体
{
得到
{
如果(_entities==null)
_实体=_context.Set();
返回实体;
}
}

我可以看到实体被设置为上下文。我看不到的是如何设置引用导航属性?任何外部关系都不会设置为上下文右侧???

此构造只是存储库核心成员的延迟初始化:
\u entities
,一个
DbSet
。无论是在那里还是在存储库的构造函数中初始化
\u实体
。它只是确保
实体
永远不会返回null尚未设置其他对象。

在对
实体执行LINQ查询之前,
实体是具体化并附加到上下文的实体。比如说

var rep = new EfRepository<Customer>();
var customers = rep.Entities.Include(c => c.Job).ToList();
var rep=new EfRepository();
var customers=rep.Entities.Include(c=>c.Job.ToList();
现在
客户
及其
作业
已从数据库加载并附加到上下文。

找到了答案

这是因为并不是我所有的属性都被标记为虚拟的,我使用的是列表而不是集合


:)

设置“实体”和“参考导航属性”是什么意思?此方法仅返回一个
IDbSet
。它不设置任何内容。默认情况下_entities为null,因此当属性被调用时,将执行行_context.set(),该行将实体“设置”到上下文中,但是任何附加的(引用导航属性),例如,如果t=Customer,则是Customer.Job附加到上下文中?可能我需要添加更多信息,当我将一个实体(即客户及其关联的作业)添加到缓存中时,我会将该客户从缓存(内存缓存)中拉出来,尝试访问该作业,并且会发生异常,通知我该作业未附加到当前上下文…是的,您应该有。即使现在,我也不清楚添加和从缓存中提取是什么意思。无论如何,如果您事先知道您需要对象及其引用(或集合)
包含
比延迟加载(通过添加
虚拟
启用)要好,因为延迟加载往往会造成许多数据库往返。我同意,只要理解延迟加载就可以:)