繁体   English   中英

NHibernate如何手动添加扩展?

[英]NHibernate How to add extensions manually?

我想使用此方法从数据库动态获取数据。 如该主题中所述,我应该在我的nhibernate配置中添加一个扩展。

有人可以说,如何添加该扩展名?

提前致谢。

public static class NhTransformers
{
    public static readonly IResultTransformer ExpandoObject;

    static NhTransformers()
    {
        ExpandoObject = new ExpandoObjectResultSetTransformer();
    }

    private class ExpandoObjectResultSetTransformer : IResultTransformer
    {
        public IList TransformList(IList collection)
        {
            return collection;
        }

        public object TransformTuple(object[] tuple, string[] aliases)
        {
            var expando = new ExpandoObject();
            var dictionary = (IDictionary<string, object>)expando;
            for (int i = 0; i < tuple.Length; i++)
            {
                string alias = aliases[i];
                if (alias != null)
                {
                    dictionary[alias] = tuple[i];
                }
            }
            return expando;
        }
    }
}

public static class NHibernateExtensions
{
    public static IList<dynamic> DynamicList(this IQuery query)
    {
        return query.SetResultTransformer(NhTransformers.ExpandoObject)
                .List<dynamic>();
    }
}

-----------------------------------
USE CASE
-----------------------------------

var results = this.session.CreateSQLQuery("select Id, Title, Body from [Posts]")
              .DynamicList(); // Secret sauce!
// results are now dynamic!
Console.WriteLine(results[0].Id);
Console.WriteLine(results[0].Name);
// rock on!

最后,我只创建了NhTransformers类,并这样做。

var query1 = " select * from mySQLView";

var result1 = this.session.CreateSQLQuery(query1).SetResultTransformer(NhTransformers.ExpandoObject)
                .List<dynamic>();

foreach (var obj in result1)
{
   // some stuff...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM