2015-01-01 2 views
0

this method을 사용하여 데이터베이스에서 동적으로 데이터를 가져오고 싶습니다. 그 주제에서 설명했듯이, nhibernate 설정에 확장을 추가해야합니다.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! 
+0

"수동으로"의미하는 것은 시도하지 않았지만 작동해야합니다. – Najera

+0

내 기존 nhibernate 환경에서이 메서드를 어떻게 사용하고 추가 할 수 있을까요? –

+0

당신은 그것을 필요 없어요, 그냥 (부름을 사용하여) 전화하고 작동해야합니다. – Najera

답변

0

마지막으로, NhTransformers 클래스 만 만들었고 이렇게했습니다.

var query1 = " select * from mySQLView"; 

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

foreach (var obj in result1) 
{ 
    // some stuff... 
} 
관련 문제