延迟加载实体,正在加载引用但实体属性不是
Posted
技术标签:
【中文标题】延迟加载实体,正在加载引用但实体属性不是【英文标题】: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
延迟加载显然只适用于导航属性,但不适用于租户属性。我将两个属性(Users
和Name
)都设为虚拟,但这似乎并不重要。
如何lazy load
Tenant
的本地属性?
【问题讨论】:
【参考方案1】:这就是它的工作方式。如果您手动创建实体并将其 Attach
到上下文中,则您告诉 EF 您不想加载实体的标量属性。
没有延迟加载标量属性,您必须始终明确地执行此操作,或者通过添加...
_applicationContext.Entry(tenant).Reload();
...在Attach
之后或将前三行替换为:
var tenant = _applicationContext.Tenants
.Find(new Guid("d176dc7c-6b96-4ab6-bddf-ce5a12024c39"));
【讨论】:
以上是关于延迟加载实体,正在加载引用但实体属性不是的主要内容,如果未能解决你的问题,请参考以下文章