- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我编写应用程序时,我使用 System.Data 接口(interface)(IDbConnection、IDbCommand、IDataReader、IDbDataParameter 等...)。我这样做是为了减少对供应商的依赖。除非,我正在做一个简单的测试应用程序,否则在咨询时这似乎是合乎道德的事情。
但是,我看到的所有代码似乎都使用 System.Data.SqlClient 命名空间类或其他供应商特定类。在杂志和书籍中,很容易将其归结为 Microsoft 的影响力和他们的营销策略,只针对 SQLServer 进行编程。但它看起来就像我看到的几乎所有 .NET 代码都使用 SQLServer 特定类。
我意识到供应商特定的类具有更多功能,例如向 SqlCommand 对象添加参数是一种方法,而将其添加到 IDbCommand 是令人讨厌的 4 多行代码。但话又说回来;为这些限制编写一个小助手类非常简单。
我还想知道当 SQLServer 是当前目标客户端时针对接口(interface)进行编程是否过度设计,因为它不是立即需要的。但我不认为这是因为针对接口(interface)进行编程的成本如此之低,因为减少供应商依赖性提供了如此巨大的好处。
您是否使用供应商特定的数据类或接口(interface)?
编辑:总结下面的一些答案,并提出我在阅读它们时的一些想法。
使用接口(interface)实现供应商中立性的可能陷阱:
最佳答案
要考虑的一件事是您切换数据库的实际机会。在大多数情况下,这永远不会发生。即便如此,这也将是一次重大的重写,即使您使用与数据库无关的类。在这种情况下,最好使用功能更丰富且能帮助您更快完成项目的那个。
话虽如此,我认为在大多数情况下,您应该使用自己创建的层,在实际的 .Net API 之上,这样如果您必须更改必须使用的类,那么它就不会那么多了一个问题。即使您留在同一个数据库上,您也永远不知道何时必须切换访问数据库的方式。任何从 ASP 迁移到 ASP.Net(ADODB 与 ADO.Net)的人都可以告诉您这是多么痛苦。
所以我认为最好的解决方案是使用功能更丰富的数据库特定 API,并在其之上构建您自己的层,以便您可以在必要时轻松更换它。
关于.net - IdbConnection 与 SqlConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/350599/
在 MVC 项目中,我有一个带有命令和查询的服务层。 在其中一些命令和查询中,我使用了需要连接的 Dapper。 public class GetPostsStatsQuery { public
我应该如何将 IDbConnection 和 IDbTransaction 与 Dapper 一起使用? 目前我只使用 IDbConnection 。如下: using (SqlConnection
当我编写应用程序时,我使用 System.Data 接口(interface)(IDbConnection、IDbCommand、IDataReader、IDbDataParameter 等...)。
我想用 firebird db 测试 dapper micro orm,但我很难访问 firebird。 Firebird 服务器已启动并运行,数据库中填充了一些虚拟数据,并存储在 c:\mydata
我有时会引发此异常: System.InvalidOperationException: 'The ConnectionString property has not been initialized
我有一个使用 autofac 进行依赖注入(inject)的 .NET MVC 应用程序。当应用程序启动时,以下代码注册 IDbConnection var connectionString = C
当连接到 SQL-Server 时,我的程序执行挂起在 .Open() 方法上超过指定的 2 秒超时。 当数据库所在的机器离线或重新启动时,我设法重现了这个问题。当数据库所在的机器启动时,程序的执行将
我有一些按顺序调用的方法,它们都按顺序对 MySQL 数据库执行查询: UpdateInvoice() - > UpdateOrderItems(connection) |--------
我有一个 IDbConnection 的实例,它可以是任何连接、Sql、OleDb 等。我想制作一个通用包装器,这样我就可以向包装器发送一个连接并获得一组很好的方法以便于操作。我有一个 Query 方
虽然我的假设听起来很主观,但经过一些研究后,我发现开发人员喜欢使用虚拟 Try/Catch 而不是使用 Using statement 的情况并不少见。用于 IDbConnection/IDbTran
我知道将 IDbConnection 对象包装在 using block 中可确保调用 Dispose 并释放它正在使用的资源。话虽如此,我是否还需要将 IDbCommand 和 IDataReade
我在我的 ASP.NET WebForms 解决方案中使用了 dapper。 我所有处理数据的类都从这个基类中检索一个打开的连接 public abstract class SalesDb : IDi
我需要一些帮助 我尝试将 INSERT 插入到我的 SQL 数据库中,但我做不到,因为在此代码行中给我一个错误: commandoSQL.Connection = dbcon; 我收到这个错误: A
TLDR:注入(inject)连接工厂与 IDbConnection 本身的原因是什么。 我目前在 .net MVC 中使用 Autofac 将 IDbConnection 实例注入(inject)到
Entity Framework cotext DbContext 具有采用 DbConnection 的构造函数。为什么不是 IDbConnection? 是否通常将 DbConnection 传递
我有一个 .Net 核心 Web 应用程序和 .net 核心库。在使用 Dapper 时,我需要传入一个继承自 IDbConnection 的具体类。问题是在 .Net Core 中 System.D
我正在尝试使用Dapper.Contrib使用 .insert() 方法等扩展 IDbConnection 接口(interface)的功能。 为此,我遵循了一些简短且分散的文档 here和 here
注入(inject)连接字符串与 IDbConnection 实例的权衡是什么? ? 我使用 StructureMap 将各种服务注入(inject)到我的 ASP.NET MVC 应用程序中,其中大
我想知道关于在 .Net 应用程序中维护与数据库的连接的最佳做法是什么(ADO.NET,但我想这种做法对于任何数据层都应该是相同的)。我应该创建一个数据库连接并将其传播到我的整个应用程序,还是只传递连
在 Dapper 中使用 BeginTransaction() 和 IDbConnection 的正确方法是什么? 我创建了一个方法,我必须在其中使用 BeginTransaction()。这是代码。
我是一名优秀的程序员,十分优秀!