我遇到了一个问题。我使用通用存储库并尝试使用它调用存储过程。我知道的唯一方法是致电
DataContext.Database.ExecuteSqlCommand(sql, parameters);
或者
DataContext.Database.SqlQuery<T>(sql, parameters);
将过程名称作为字符串传递。但我已经在我的DBContext中有过程。真的没有办法避免将过程名称作为字符串传递吗?
答案 0 :(得分:1)
您是否存在字符串类型的特定问题,或者您指的是&#34;魔术字符串&#34;如在回购中定义的常量?您是否更愿意通过构造函数将字符串名称作为配置值传递,然后让DI容器提供它们?
另一种选择,你可以为Database对象定义一个扩展方法,该对象具有字符串并包装ExecuteSqlCommand或SqlQuery,并将其命名为与存储过程相同,因此它看起来像DataContext.Database.MyStoredProcedure(paramaters)
,这样你的存储库就是不了解这个实施细节。
话虽如此,当我使用存储库模式时,存储库的目标之一是隐藏持久性的实现细节,我个人认为只使用字符串没有问题,因为调用存储库的任何东西都不是明智的