我有以下模型。在使用 find 方法从数据库中获取数据时,用子实体加载父实体的更好方法是什么?
父实体:
public class Client
{
public int Id { get; set; }
public string LastName { get; set; }
public string Gender { get; set; }
public DateTime DateOfBirth { get; set; }
public Address Address { get; set; }
}
子实体:
public class Address
{
public int Id { get; set; }
public string FirstLine { get; set; }
public string SecondLine { get; set; }
public string Province { get; set; }
}
现在,当我尝试使用 Find 方法获取数据时,我得到的地址实体为 null,但是当我检查子表中该 ID 的数据库数据时也存在。
referenceContext.Clients.Find(client.Id);
有办法克服这个问题吗?当我获取父对象时,同时子实体的值也随父实体一起加载。
注意:到目前为止,如果我使用Include(i => i.Address)
然后,然后,只有我能够加载子实体。
我已经使用了“包含”,但是如果我获取父实体,是否存在其他选项来加载子实体。
referenceContext.Clients.Where(c => c.IsActive.Equals(true))
.Include(i => i.Address).ToList();
如你所说:
注意:到目前为止,如果我使用包含(i => i.地址)然后,然后,只有我能够加载子实体。
是的!这是在 EF Core 中加载相关数据的最佳方式。
你还说:
我已经使用了“包含”,但是如果我获取父实体,是否存在其他选项来加载子实体。
是的!有!它被称作延迟加载。要启用延迟加载,您必须设置导航属性virtual如下:
public class Client
{
public int Id { get; set; }
public string LastName { get; set; }
public string Gender { get; set; }
public DateTime DateOfBirth { get; set; }
public virtual Address Address { get; set; } // <-- Here it is
}
并且你必须注册你的DbConext
如下:
services.AddDbContext<BloggingContext>(
b => b.UseLazyLoadingProxies() // <-- Here is it is
.UseSqlServer(myConnectionString));
UseLazyLoadingProxies()
方法可在Microsoft.EntityFrameworkCore.Proxies努吉特包。
注意:您无法禁用特定查询的延迟加载。所以使用预加载是在 EF Core 中加载相关数据的最佳方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)