Here is the fact, I am enjoy using Castle.ActiveRecord to wrap my DAL code cuz it simplify thing a lot for me > 80% somehow when it came to not so complex scenario like this one:
I want to allow my customer to list all the products and set the qty they want to order.
If they already order I would like to give them a chance to update qty for the product that they miss in the previous hit.
public IList LoadProductOrderList(int customer_id)As much as I hate, it is a bad idea to pass IList back to the caller object. What is interesting about this code session.CreateSQLQuery(sql) you can tell it to map the result to an Entity by call like this
{
IList result;
ISessionFactoryHolder sh =
ActiveRecordMediator.GetSessionFactoryHolder();
ISession session = sh.CreateSession(typeof(AnnualTarget));
try
{
// note: code wrapped for view
string sql = "SELECT p.pid, p.name, o.qty, o.id as order_id
FROM Products p JOIN Orders o
ON p.pid = o.product_id WHERE o.customer_id = :c1
UNION
SELCT pid, name, 0 as qty, 0 order_id FROM Products";
result = session.CreateSQLQuery(sql)
.AddScalar("ID", NHibernateUtil.Int32)
.AddScalar("NAME", NHibernateUtil.String)
.AddScalar("QTY", NHibernateUtil.Int32)
.AddScalar("ORDER_ID", NHibernateUtil.Int32)
.SetInt32("c1", customer_id)
.List();
}
catch (Exception ex)
{
....
}
finally
{
sh.ReleaseSession(session);
}
return result; <- this is an IList ?!!! I don't like to work with it }
session.CreateSQLQuery(sql)But anyway I have got time to dig what AddEntity would do with the object pass in to me the road a head is a bit dark. Can I have something more simple?
.AddEntity(typeof(EntityObjectOfTypeActiveRecord))
.List();
The simple should be:
public IListNow it much better to work withLoadProductOrderList(int customer_id)
{
IListbetterResult = new List ();
.....
for(int i = 0; i < curobject =" (object[])" dto =" new" id =" curObject[0];" name =" curObject[1];" qty =" curObject[2];" orderid =" curObject[3];">