fra*_*res 5 c# linq entity-framework tolist
我有一个非常特殊的问题:ToList()扩展方法无法将结果转换为列表.这是我的代码,标准样板linq查询,我转换了ToList()两次以获得良好的衡量标准
var assets = new List<Asset>();
using (var ctx = new LeaseContext())
{
assets = ctx.Assets.OrderBy(o => o.Reference).Where(w => w.Status == AssetStatus.Active).ToList();
assets.ToList();
}
return assets;
Run Code Online (Sandbox Code Playgroud)
但资产仍然是System.Data.Entities.DynamicProxies...... 的清单
我以前从未遇到过这个问题.
原因是延迟加载.在EF中启用延迟加载(默认情况下),然后(默认情况下),EF会为每个实体创建动态代理.它是加载相关实体所必需的.动态代理将从实体类继承.所以在你的情况下它将继承自Asset.但是动态代理将引用创建其实例的上下文.它将覆盖通过存储在动态代理中的上下文查询实体的导航属性(它们是虚拟的).
将派生类型的实例添加到基类型列表是完全合法的.
如果您不想要动态代理,那么只需禁用延迟加载和代理创建:
ctx.Configuration.LazyLoadingEnabled = false; // turn-off loading on-demand
ctx.Configuration.ProxyCreationEnabled = false; // turn-off wrapper class generation
Run Code Online (Sandbox Code Playgroud)
从技术上讲,您可以关闭代理生成,延迟加载将无法正常工作.但我更愿意明确地关闭这两个设置.
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |