c# - 如果我可以使用存储过程实现相同的功能,这是一个好的做法,为什么?
问题描述
using (var db = new PoContext())
{
var maxSrno = db.poDtInfo.Where(x => x.Job_Code_Id == Convert.ToInt16(jobcodeID)).Select(x => x.Po_Dt_Id).Max();
if (maxSrno == null)
maxSrno = jobcodeID + 102 + 10000001;
else
maxSrno = Convert.ToString(Convert.ToInt64(maxSrno) + 1).ToString(); //Convert.ToInt64(maxSrno) + 1 .ToString();
var newPo = new PoDtInfo();
JsonConvert.PopulateObject(values, newPo);
newPo.Po_Dt_Id = maxSrno;
db.poDtInfo.Add(newPo);
db.SaveChanges();
result = true;
}
解决方案
存储过程的缺点
- 存储过程很难维护。重构使用特定模式或使用依赖注入要困难得多。
- 它们很难调试。
- 单元测试即使不是不可能也更难。
- 控制版本和部署更加困难。
- 控制本地化更难(如果只是生成本地化错误消息)。
- 此外,它们将不良集成到软件中。如果您想获取 .NET 事件、异常、写入日志文件等。
- 使用您在 C# 中编写的简洁工具库(如项目特定字符串处理、特定数据类型、日期和时间等)变得更加困难或不可能
存储过程的优点
- 存储过程可能会更快。仅在有大量数据必须加载到另一台机器进行处理的情况下。
由于存在大量缺点,我只会在您必须解决无法以其他方式解决的性能问题时使用存储过程。注意:我已经为一个大型的以数据库为中心的客户端-服务器应用程序编写了软件,并且从未编写过一个存储过程。