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

标签 c# .net performance enterprise-library enterprise-library-5

想知道 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/

相关文章:

c# - 如何降低 aspnetcore 中 mvc 管道的日志级别?

c# - 如何在 UWP 应用程序的 AppX 中包含文件夹和文件?

c# - WebApi 中自动生成的 EF 代码无法在 Azure 上运行,但在测试时可以在本地运行

c# - 在windows服务项目中注册autofac

asp.net - Java 和 tomcat 与 ASP.NET 和 IIS

c# - 在 OData 查询中使用复杂类型

c# - 在 C# 中有一个属性的非常奇怪的错误

.net - string.Compare 行为

javascript - 如何在 Pinterest、Twitter 和 Facebook Javascript 文件中启用 gzip 压缩并利用浏览器缓存。

iphone - 如何在cocos2d中快速绘制背景?