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

时间:2012-03-02 20:13:22

标签: vb.net linq-to-sql ado.net database-connection

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

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

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

1 个答案:

答案 0 :(得分: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语句SQL Server将执行。

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