0

我一直在使用 nhibernate ORM 将数据从应用程序插入到 sql 表中。但最近我尝试在 Ado.net 上阅读并发现使用存储过程而不是 sqlcommand.executenonQuery() 的建议。

在这种情况下,每个表插入都需要不同的存储过程。一个 100 个表的应用程序将需要 100 个存储过程。我的理解是正确的还是有更好的方法以更通用的方式做到这一点?

请建议。

4

3 回答 3

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 是邪恶的。

于 2013-06-19T03:56:09.363 回答
1

您是否听说过执行查询并将结果映射到强类型列表的强大工具。Dapper 还支持存储过程,看看这个

例子:

dbConnection.Query<return type>("yourSP", parameters, 
        commandType: CommandType.StoredProcedure).First();

还需要一些时间来检查这个SO question

于 2013-06-19T04:09:13.997 回答
0

如果我有超过 5 个不同的表可供选择和/或插入,我个人会使用 ORM。如果公交车站就在门前,为什么要步行 100 英里?

也就是说,ORM是一种访问数据的通用方式。如果您想手动编写所有代码,您当然可以编写带有可选参数的存储过程,但我不推荐它。

于 2013-06-19T04:21:54.597 回答