NHibernate를 사용하여 저장 프로 시저를 호출하고 DTO를 채우는 방법을 이미 알고 있습니다 (대답 : here).NHibernate를 사용하여 저장 프로 시저를 호출하고 DataTable을 채울 수 있습니까?
하지만, 그 가능성이 어떻게 NHibernate에서 ResultTransformer의 동일한 개념을 사용하여 DataTable을 채우기 위해 궁금 해서요 아니면 거기에 다른 권장 된 접근법인가?
나는 NHibernate에서 ResultTransformer의 개념을 사용하는 것을 선호한다. 그러나, 나는 그것의 가능하고 어떻게 있는지 모른다. 다른 사람이 이것을 시도 했습니까? 난 그냥 정의의 ResultTransformer를 작성에서 사용했다
using (ISession session = sessionFactory.OpenSession())
{
var sqlQuery = session.CreateSQLQuery("SELECT ID, NAME, ADDRESS FROM CUSTOMER");
var transformedQuery = sqlQuery.SetResultTransformer(new DataTableResultTransformer());
return transformedQuery.List().Single();
}
: 다음과 같은
public class DataTableResultTransformer : IResultTransformer
{
private DataTable dataTable;
public IList TransformList(IList collection)
{
var rows = collection.Cast<DataRow>().ToList();
rows.ForEach(dataRow => dataTable.Rows.Add(dataRow));
return new List<DataTable> { dataTable };
}
public object TransformTuple(object[] tuple, string[] aliases)
{
//Create the table schema based on aliases if its not already done
CreateDataTable(aliases);
//Create and Fill DataRow
return FillDataRow(tuple, aliases);
}
private DataRow FillDataRow(object[] tuple, string[] aliases)
{
DataRow dataRow = dataTable.NewRow();
aliases.ToList().ForEach(alias =>
{
dataRow[alias] = tuple[Array.FindIndex(aliases, colName => colName == alias)];
});
return dataRow;
}
private void CreateDataTable(IEnumerable<string> aliases)
{
if (dataTable == null)
{
dataTable = new DataTable();
aliases.ToList().ForEach(alias => dataTable.Columns.Add(alias));
}
}
}
그리고 그것을 사용 :
누군가 성공한 것으로 보인다 :-) http://www.codewrecks.com/blog/index.php/2010/10/07/load-a-strongly-typed-dataset-from-a- 저장된 - with-nhibernate/ – jbl
@jbl, 참조 용 +1, 나는 개념을 사용하고 해답 :-)로 넣어. 좀 봐주세요. – Baig
NHibernate는이 시나리오에서는 잡음에 지나지 않는다. 그냥 (원하는 경우) 그것에서 연결을 가져오고 DataAdapter를 사용하십시오. –