gpt4 book ai didi

c# - EF6 预加载相关实体的单个属性

转载 作者:太空狗 更新时间:2023-10-29 20:17:08 24 4
gpt4 key购买 nike

在 EF6 中,我有一个实体 Customer,它具有指向实体地址的导航属性。地址实体包含属性“城市”。

我可以像这样获取所有客户的同时加载地址实体:

_dbSet.Customers.Include(customer => customer.Address);

这给了我所有的客户,所有的地址属性都是预先加载的。

当然这很好用,但是我唯一需要从 Address 表中获取字段“City”,并且在不需要的情况下从持久数据存储 (SQL Server) 中获取所有地址属性感觉不太好他们。

我尝试了以下方法:

_dbSet.Customers.Include(customer => customer.Address.City);

...但这给了我一个运行时异常:

An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll

Additional information: A specified Include path is not valid. The EntityType 'MyModel.Address'does not declare a navigation property with the name 'City'.

我理解这一点,因为 City 只是一个字段,而不是与另一个表/实体的关系。

但是否有另一种方法来完成我想要的,或者最好的做法是只包含整个 Address 实体,即使我只需要城市字段???

我想要的是我可以使用 myCustomer.Address.City,而无需对数据库进行额外查询,但是例如当我使用 myCustomer.Address.Street 时,Street 属性不会急切加载,并且应该另外加载从数据库中获取...

最佳答案

仅选择所需的属性,EF 将仅加载所需的属性。

var query = _dbSet.Customers.Include(customer => customer.Address);
var data = query.Select(c => new { Customer = c, City = c.Address.City });

关于c# - EF6 预加载相关实体的单个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20282032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com