gpt4 book ai didi

c# - 企业库 5.0 是否在 DataReader 和访问器方法的自定义类之间缓存映射

转载 作者:太空狗 更新时间:2023-10-30 00:44:13 24 4
gpt4 key购买 nike

想知道 Enterprise Library 5.0 的访问器方法是否缓存 datareader 的字段以及自定义类以提高性能,这样它就不会使用反射在自定义类上查找字段名称,并且在以下情况下不会在 datareader 上查找字段名称将数据读取器映射到对象?因为为每个访问/代码块将自定义类字段映射到数据读取器字段是一项非常昂贵的操作

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>();
var r = db.ExecuteSqlStringAccessor<Region>("SELECT * FROM Region");
}

}

public class Region
{
public string RegionnId { get; set; }
public string Name { get; set; }
}

最佳答案

来自 the code ,该方法通过:

public static IEnumerable<TResult> ExecuteSqlStringAccessor<TResult>(this Database database, string sqlString)
where TResult : new()
{
return CreateSqlStringAccessor<TResult>(database, sqlString).Execute();
}

然后到

IRowMapper<TResult> defaultRowMapper = MapBuilder<TResult>.BuildAllProperties();

经过

return MapAllProperties().Build();

即:

    public static IMapBuilderContext<TResult> MapAllProperties()
{
IMapBuilderContext<TResult> context = new MapBuilderContext();

var properties =
from property in typeof(TResult).GetProperties(BindingFlags.Instance | BindingFlags.Public)
where IsAutoMappableProperty(property)
select property;

foreach (var property in properties)
{
context = context.MapByName(property);
}
return context;
}

所以没有;我看不到那里有任何缓存的证据。您可以添加一些,或者您可以使用已经执行实体化器和参数化缓存的 Domething(*咳咳* dapper-dot-net *咳咳*)

关于c# - 企业库 5.0 是否在 DataReader 和访问器方法的自定义类之间缓存映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8385642/

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