【问题标题】:Lazyloading entities, references are loading but entity properties aren't延迟加载实体,正在加载引用但实体属性不是
【发布时间】:2013-01-27 17:43:48
【问题描述】:

我仍处于 EF 学习过程中,我正在尝试更熟悉 EF 延迟加载。

请考虑以下课程和测试:

[Table("Tenant")]
public class  Tenant : IEntity
{
    public int Id { get; set; }
    public virtual string Name { get; set; }
    [Key]
    public string Guid { get; set; }
    public virtual ICollection<User> Users { get; set; }
    public virtual ICollection<CaseType> CaseTypes { get; set; }

    public Tenant()
    {
        Users = new List<User>();
        CaseTypes = new List<CaseType>();
    }
}

还有测试:

    [Test]
    public void TenantLazyLoading()
    {
        var tenant = _applicationContext.Tenants.Create();
        tenant.Guid = "d176dc7c-6b96-4ab6-bddf-ce5a12024c39";
        _applicationContext.Tenants.Attach(tenant);
        Assert.AreEqual(1, tenant.Users.Count); // Pass, the navigation property users was loaded (lazy)
        Assert.AreEqual("localhost", tenant.Name); // Fail, the tenant name is not loaded
    }

延迟加载显然只适用于导航属性,但不适用于租户属性。我将两个属性(UsersName)都设为虚拟,但这似乎并不重要。

如何lazy loadTenant 的本地属性?

【问题讨论】:

    标签: c# entity-framework lazy-loading


    【解决方案1】:

    这就是它的工作方式。如果您手动创建实体并将其 Attach 到上下文中,则您告诉 EF 您不想加载实体的标量属性。

    没有延迟加载标量属性,您必须始终明确地执行此操作,或者通过添加...

    _applicationContext.Entry(tenant).Reload();
    

    ...在Attach 之后或将前三行替换为:

    var tenant = _applicationContext.Tenants
        .Find(new Guid("d176dc7c-6b96-4ab6-bddf-ce5a12024c39"));
    

    【讨论】:

      猜你喜欢
      • 2016-11-07
      • 2013-05-21
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多