使用DataContext类和SqlConnection有什么区别?

Ada*_*eck 4 vb.net ado.net database-connection linq-to-sql

这可能是一个非常模糊的问题,但我想我真的不明白发生了什么.我之前问了一个问题,我被告知一种"将数据绑定到对象"的简单方法就是运行SqlConnection(connectionString).该回复还包括一条评论说我可以看中L2S和实体框架,所以我更深入地研究了这些.看来,与DataContext对象有关的所有内容都指向数据库.为什么SqlConnection会带来好处?

使用其中任何一个有什么区别(或优点/缺点)?还有一个"标准"吗?一个更现代吗?

PS我问了很多不需要回答的问题.我只想为我的问题添加一些清晰度,以及我对这个主题的理解程度.

mar*_*c_s 8

SqlConnection是原始ADO.NET类库的基础 - 该库的SQL Server部分,真的.这是.NET中所有数据访问的基础.

使用原始ADO.NET,你是非常"笨拙"并接近金属 - 你必须创建你的SQL查询并执行它们,你得到行和列,非常像关系数据库会给你.

优点:非常接近SQL,非常强大,性能最佳
缺点:更难编写,更多"粘合"代码,更少类型安全,更紧密地耦合到底层数据库结构


DataContext(Linq-to-SQL)或ObjectContext(实体框架)是更高级别的抽象 - 它们位于ADO.NET之上,但它们(Linq-to-SQL或Entity Framework)提供所谓的ORM功能 - 在这里,你不是真正处理原始SQL语句和行/列,相反,这些代码生成器将为您创建一个抽象层 - 它是从.NET对象构建的.数据库中的每个表都将转换为相应的.NET类,其中包含该表中所有列的属性.

此外,对于L2S和EF,您通常使用LINQ查询 - 您的查询更像C#代码,L2s/EF将处理您在C#中表达的查询转换为SQL Server将执行的实际SQL语句.

优点:更容易使用,处理得更好(具有属性与原始行/列的对象),类型安全,使用LINQ查询的能力,更高的开发生产力
缺点:另一层意味着更多的翻译,打击性能,而不是非常适合某些事情(如批量操作)