Using Microsoft.Practices.EnterpriseLibrary.Data IResultSetM

本文关键字:Data IResultSetM EnterpriseLibrary Practices Microsoft Using | 更新日期: 2023-09-27 18:10:14

而不是滚动我自己的ADO。Net助手类,我决定给microsoft.practicesenterpriselibrary一个旋转。看了文档和示例项目,我真的很喜欢我所看到的。

对于我的项目,我将为所有的数据访问调用存储过程。特别是,我将严重依赖于ExecuteSprocAccessor方法。

我的问题是使用IResultSetMapper接口。文档说实现这个接口的类,必须实现方法MapSet(reader:IDataReader):IEnumerable不幸的是,我找不到任何如何实现这个方法的例子。

下面是我认为正确的用法:

class MyPOCO : IResultSetMapper<MyPOCO>
{
    int    ID   { get; set; }
    string Name { get; set;}
    public IEnumerable<MyPOCO> MapSet(IDataReader reader)
    {
        // HELP ME HERE! PLEASE!
    }
}

请告诉我如何填写这个空格!如果我这样做是正确的(通过让我的POCOs实现IResultSetMapper)或者如果我只是方式!

谢谢!

Using Microsoft.Practices.EnterpriseLibrary.Data IResultSetM

您真的需要使用IResultSetMapper<T>吗?您的POCO是否足够简单,可以使用IRowMapper<T>来构建?如果你只有简单的对象,没有层次结构或嵌套集合等,那么IRowMapper<T>可能足够好。虽然IResultSetMapper<T>确实给了你最大的灵活性。

我不会让POCO实现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…"

相关文章: