Using Microsoft.Practices.EnterpriseLibrary.Data IResultSetM
本文关键字:Data IResultSetM EnterpriseLibrary Practices Microsoft Using | 更新日期: 2023-09-27 18:10:14
而不是滚动我自己的ADO。Net助手类,我决定给microsoft.practicesenterpriselibrary一个旋转。看了文档和示例项目,我真的很喜欢我所看到的。
对于我的项目,我将为所有的数据访问调用存储过程。特别是,我将严重依赖于ExecuteSprocAccessor
我的问题是使用IResultSetMapper
下面是我认为正确的用法:
class MyPOCO : IResultSetMapper<MyPOCO>
{
int ID { get; set; }
string Name { get; set;}
public IEnumerable<MyPOCO> MapSet(IDataReader reader)
{
// HELP ME HERE! PLEASE!
}
}
请告诉我如何填写这个空格!如果我这样做是正确的(通过让我的POCOs实现IResultSetMapper)或者如果我只是方式!
谢谢!
您真的需要使用IResultSetMapper<T>
吗?您的POCO是否足够简单,可以使用IRowMapper<T>
来构建?如果你只有简单的对象,没有层次结构或嵌套集合等,那么IRowMapper<T>
可能足够好。虽然IResultSetMapper<T>
确实给了你最大的灵活性。
IResultSetMapper<T>
。我将创建一个单独的映射器类。这消除了POCO类对企业库的依赖。而且,POCO类现在独立于映射。您可以更改映射或映射器,而不会影响POCO。
public class MyPocoMapper : IResultSetMapper<MyPoco>
{
public IEnumerable<MyPoco> MapSet ( IDataReader reader )
{
using(reader) // Dispose the reader when we're done
{
while (reader.Read())
{
yield return new MyPoco()
{
MyProperty1 = reader.GetString(
reader.GetOrdinal("MyPropertyX")),
MyProperty2 = reader.GetString(1)
};
}
}
}
}
可能像这样
public IEnumerable<MyPOCO> MapSet(IDataReader reader)
{
while(reader.Read())
yield return new MyPOCO()
{
ID = reader.GetInt(0),
Name = reader.GetString(1)
};
}
如果您的查询看起来像whis "select ID,Name from…"