title: .NET data base access: Newest technology, comparison (2011)
body: <p>In fact, I have several questions, which I hope, can be answered objectively.</p>
  
  <ol>
  <li><p>Which standard not obsolete techniques to access databases are available in .NET?
  I know the following:</p>
  
  <ul>
  <li>ADO.NET
  <ul>
  <li>using DbDataReader</li>
  <li>using DataSet, DataTable, etc.</li>
  <li>Inside ASP as SqlDataSource</li>
  </ul></li>
  <li>EF</li>
  <li>LINQ to SQL</li>
  <li>NHibernate (whcih in fact is 3rd party but seems to be some kind of a standard solution)</li>
  </ul></li>
  <li><p>Which of them are limited to certain DB providers?
  As far as I know, ADO.NET supports most DB types and LINQ to SQL only supports MS SQL 2005 and later.</p></li>
  <li><p>Are there restrictions regarding specific .NET versions?
  E.g. LINQ requires .NET 3.5 etc.</p></li>
  <li><p>Which of them is suitable to provide simple DTO which can be simply written as code, containing the DB data, not neccessarily bound to the DB schema?
  The goal is to be able to write classes, which don't need to represent the table layout of the DB. For example: A class representing the results of several tables. I'D also appreciate a solution which can be diffed easily e.g. in a versioning system.</p></li>
  <li><p>Which of them shouldn't be used with certain other techniques? Are there known limitations?
  I don't want to start a war over performance etc. here, but I can imagine, that certain techniques won't work together or would be extremely inefficent or complicated.</p></li>
  </ol>