我一直在使用nhibernate ORM将数据从应用程序插入到sql表中。 但最近我尝试在Ado.net上阅读,并发现建议使用存储过程而不是 sqlcommand.executenonQuery()。
在这种情况下,每个表插入都需要一个不同的存储过程。 100表应用程序将需要100个存储过程。我的理解是正确的还是有更好的方式以更通用的方式做到这一点?
请建议。
答案 0 :(得分:1)
简单的单行命令可以是通过参数化Command类直接在.NET代码中给出的INSERT。类似的东西:
using (SqlConnection sqlConn = new SqlConnection(connectionString)) {
using (SqlCommand sqlCmd = new SqlCommand("INSERT INTO MyTable (Field1, Field2) VALUES (@Param1, @Param2)", sqlConn)) {
sqlCmd.Parameters.AddWithValue("@Param1", someValue1);
sqlCmd.Parameters.AddWithValue("@Param2", someValue2);
sqlConn.Open();
sqlCmd.ExecuteNonQuery();
}
}
因此它不必是每个命令的存储过程。您可以拥有一个或多个专门用于DB访问的类(db访问层),并使用各种方法填充它以从DB读取/写入。您甚至可以使用通用方法自动派生INSERT / UPDATE命令的参数。
当然,如果超过1-2个命令或涉及某些逻辑 - 请求存储过程。
不过,这是我个人的观点,但我认为ORM是邪恶的。答案 1 :(得分:1)
您是否听说过dapper,这是 执行查询并将结果映射到强类型列表 的强大工具。 Dapper还支持 存储过程 ,请检查this。
示例:强>
dbConnection.Query<return type>("yourSP", parameters,
commandType: CommandType.StoredProcedure).First();
还需要一些时间来检查SO question。
答案 2 :(得分:0)
如果我有超过5个不同的表来选择和/或插入,我个人会使用ORM。如果公共汽车站就在门的正前方,你为什么要走100英里?
那说 ORM 是访问数据的通用方式。如果你想手动编写所有代码,你肯定可以用可选参数编写存储过程,但我不推荐它。