任何人都可以帮我一些想法吗?以下是我的问题。 假设我有一个名为A的实体,其中包含字段A1,A2,A3和A4,并且我还有3个存储过程,它们仅从表A返回数据。
(注意:表A只有4列A1,A2,A3,A4)。
返回A1,A2的第一个存储过程 第二个存储过程返回A1,A2,A3 第三个存储过程单独返回A1。
对于上面的场景,我是否需要创建三个不同的映射,或者是否有任何解决方法?如何使用单个实体A处理此场景并使用较少的更改代码.......
我的情景:
public IList<Userdatasw> Find(string userName)
{
var s = ServiceLocator.Resolve<IeGoatSessionFactory>().OpenSession();
// Executing the stored procedure
IList userList1 = s.CreateSQLQuery("exec dbo.IFSEntry @UserName=:UserName")
.AddScalar("Password", NHibernateUtil.String)
.AddScalar("UserLevel", NHibernateUtil.Int32)
.AddScalar("UserName", NHibernateUtil.String)
.AddScalar("EmployeeId", NHibernateUtil.String)
.AddScalar("SenAccntManager", NHibernateUtil.String)
.AddScalar("updaterequired", NHibernateUtil.String)
.SetParameter("UserName", userName).List();
// Trying to cast anonymous type to Userdatasw
IList<Userdatasw> userdatasw1 = userList1.OfType<Userdatasw>().ToList();
return userdatasw1;
}
在上面的代码中,返回类型是Ilist但我需要将其转换为Userdatasw,代码更改更少。 我已经看到很多链接来解释Nhiberante中“存储过程中的填充”,但我有20个字段的实体,而上面的SP只返回6个值。
因此,对于每个返回相同类型的SP,我们需要创建单独的映射?
任何想法都将受到赞赏。
谢谢, 文卡塔斯。 Ĵ
答案 0 :(得分:0)
大家好我有解决方案。如果我们使用SetResultTransformer,它很简单。
public IList<Userdatasw> Find(string userName)
{
var s = ServiceLocator.Resolve<IeGoatSessionFactory>().OpenSession();
IQuery query = s.CreateSQLQuery("exec dbo.IFSEntry @UserName=:UserName")
.AddScalar("Password", NHibernateUtil.String)
.AddScalar("UserLevel", NHibernateUtil.Int32)
.AddScalar("UserName", NHibernateUtil.String)
.AddScalar("EmployeeId", NHibernateUtil.String)
.AddScalar("SenAccntManager", NHibernateUtil.String)
.AddScalar("updaterequired", NHibernateUtil.String)
.SetResultTransformer(Transformers.AliasToBean(typeof(Userdatasw)))
.SetParameter("UserName", userName);
return query.List<Userdatasw>();
}