我真的迟到.Net游戏并且努力学习ADO.Net。我更愿意学习如何以“正确的方式”进行数据访问。在某些地方,我认为它被认为优于手动编码自己的Connections,数据适配器,DataSet,DataTables,甚至是用于更新,添加和删除的命令语句,而不是使用Visual Studios数据向导。我从阅读中理解,有些事情你只能通过编写自己的命令陈述来做,但我不清楚这可能是什么。
我应该始终编写自己的连接,数据适配器,数据集和数据表吗?我的更新,插入和删除命令语句怎么样?我怎么知道何时应该手动编码?
答案 0 :(得分:2)
根据我自己的经验,首选使用硬编码而不是使用智能控制向导。
答案 1 :(得分:2)
没有正确或错误的方式。但是,我建议你首先按照“艰难的方式”做事,因为你需要为每个数据访问例程编写自己的代码。当然这意味着你还需要了解和理解SQL。最终,您可以使用/ build工具以您需要的方式生成所有代码。
最好在代码中使用存储过程而不是SQL语句,因为存储过程提供了额外的抽象级别,甚至从您的数据层甚至是业务层抽象数据库模式。
我使用过ADO.NET核心(即编写自己的数据访问代码等)。我将DataSets / DataTable(如果必须)纯粹用作内存中的数据结构而不使用它们来进行自动更新/删除等。坚持使用DataReader,尽可能将它们转换为DTO(用于数据检索方法)。对于数据修改方法,您的数据层应将DTO作为参数(如果只有一个或两个,则将简单数据类型作为参数)。
我个人使用工具生成使用ADO.NET核心的数据访问层代码(而不是EF或LINQ2SQL等)。这是我个人的偏好,取决于你的应用程序的大小,它在性能方面走了很长的路,并且需要深入了解两件事。您的数据库以及SQL和C#代码,无需了解抽象层和专用语言的细微差别(在某些情况下)。
在大型项目(和团队)中,将数据库架构和存储过程留给专业领域的人员成为必需品和要求,在这些情况下,使用ADO.NET核心也成为一项要求。
在我的博客上,我发布了一篇文章,其中介绍了一个生成所有代码的工具。工具和源代码可供下载。该工具还为强类型数据加载器生成代码。这是你正在使用DataReader的封面,而在代码中它看起来/感觉就像强类型属性一样DTO。
答案 2 :(得分:1)
我认为您应首先了解其完成情况under the covers然后选择abstraction layer many。
答案 3 :(得分:1)
LINQ to SQL在自动执行常见Db任务方面做得非常出色。使用DataContext dbml文件,所有基本的CRUD(创建,读取,更新,删除)操作都将更容易编码。代码更容易编写,不依赖于字符串,与其他ADO.NET命令兼容(您可以对DbCommand
执行直接DataContext
,并且它比任何大多数都更优化人们会写(特别是初学者!)。通过使用LINQ to SQL或其他ORM之类的东西,你将节省很多时间。除非你的目标是纯粹的学习,否则你最好通过创建一个有效的DataContext并分析看看它是如何工作而不是自学ADO.NET的来源。事实上你需要提出这个问题,可能表明你不会通过编写自己的样板来增加应用程序的价值访问代码。
在您使用LINQ to SQL之类的ORM之前,看起来很多人都建议您首先对DAL进行硬编码。我只想指出,这种思路所涉及的逻辑将需要我们在编写C#代码之前学会用IL编码,在我们使用之前构建一台计算机,然后在我们采取国际航空之前驶过海洋平面上。强>
答案 4 :(得分:0)
对此没有真正的黑白答案,但根据我的经验,我总是更好地编写自己的东西。这主要是因为我只是一个肛门保持强迫性控制狂,我只是不相信巫师以我想要的方式编写代码。我相信很多人都同意我的观点,就像我确信很多人不同意我一样。
OR / Ms存在的事实足以证明您并不总是需要自己编写代码。它不是强制性的事实也证明你没有被迫使用它。
做任何正确的事情,满足您的解决方案的需求及其时间和预算限制。