2016-06-12 92 views
2

虽然SqlDataReader.Read()实现了IDataReader.Read(),但在使用异步方法(如ReadAsync())时似乎没有接口SqlDataReader为什么没有SqlDataReader.ReadAsync()的接口

首先,纠正我,如果我错了。

这是有理由吗?有没有什么关于新的异步等待东西,证明在这里缺乏接口?这只是有点莫名其妙。

+0

“SQL团队不理解OOP”的部分无论如何都是一个非常大胆的声明:\ –

+0

@MatiaszFidemraizer是的,不应该这么说。 –

回答

8

虽然界面没有定义整个方法,但有一个共同的抽象类DbDataReader which defines ReadAsync

可能不包括ReadAsync作为IDataReader接口的一部分的最重要原因是为了避免在向后兼容性方面发生重大变化。

如果IDataReader在新框架的版本将迫使任何数据读取器实施ReadAsync,任何ADO.NET提供程序或框架依靠所谓的界面上不会在所有实现它,这些实现将被打破。

也许他们可以使用接口隔离原则,他们可以定义一个名为IDataReaderAsync这可以提供定期IDataReader成员的异步口味的新界面...但是,至少,他们已经提供了一个基类,它已经是

System.Data.DataTableReader

System.Data.EntityClient.EntityDataReader

:很多框架类派生System.Data.Odbc.OdbcDataReader

System.Data.OleDb.OleDbDataReader

System.Data.OracleClient.OracleDataReader

System.Data.SqlClient.SqlDataReader

...和第三方ADO.NET提供商'IDataReader也可能衍生DbDataReader