后面的故事到这是一个同事不喜欢我们的企业库数据访问块标准化因为企业库数据访问块设计决策
- 它需要在这需要每一个项目太多引用的事实数据库访问
- 我们并不需要它提供的所有功能
- 他认为DbCommand/SqlCommand应该内部存储在数据库对象中,而不必让数据库构建一个sqlcommand并要求用户管理其状态外部
- 他不喜欢在添加参数时必须指定类型,他认为重载应该为您推断出类型。 *不喜欢那个企业库是通用的所有数据库,当我们的系统显然只是永远将是兼容的SQL服务器反正
我个人想使用企业库,而不是他的家溶液生长保持,但它的确让我提出了一些问题。
为什么企业库或其他数据库抽象层为基本类型提供AddParameter重载?
例
db.AddInParameter(dbCommand,
"EmployeeID", DbType.Int32, 1);
会是什么原因,或者一些原因,他们不只是提供如int所有的数据类型重载,而不是仅考虑对象,并强制用户指定类型。
db.AddInParameter(dbCommand, "EmployeeID", 1);
,我能想到的是一些原因...
如果不指定每一个类型映射为过载以下情况可能发生。
比方说你有INT过载而不是char
char c = 'R'
db.AddInParameter(dbCommand, "Initial", c);
编译器将解决超载为int而不是char和因为存储过程expeected类型是char抛出一个错误。
另一个含义是,如果我想模拟数据库类,我现在有一个重载的接口,我需要实现而不是一个。
我的另一大问题是... ...
为什么数据访问块需要检索命令对象,然后传回在后续调用,而不是仅仅在内部管理其状态?
using (var cmd = db.GetStoredProcCommand("AddEmployee"))
{
db.AddInParameter(cmd, "@Name", DbType.String, name);
代替
using(var db = new Database())
{
db.CreateStoredProcCommand("AddEmployee")
db.AddInParameter("@Name", DbType.String, name);
我希望看到你们的想法。
感谢