如何在不将过程名称作为字符串传递的情况下使用存储库模式调用存储过程
How to call a stored procedure in using repository pattern without passing procedure name as a string
我有一道题。我使用通用存储库并尝试用它调用存储过程。我知道的唯一方法是调用
DataContext.Database.ExecuteSqlCommand(sql, parameters);
或
DataContext.Database.SqlQuery<T>(sql, parameters);
将过程名称作为字符串传递。但是我的 DBContext 中已经有了这个过程。真的没有办法避免将过程名称作为字符串传递吗?
字符串类型是否存在特定问题,或者您指的是 "magic strings" 作为存储库中定义的常量?您是否愿意通过构造函数将字符串名称作为配置值传入,然后让 DI 容器提供它们?
另一种选择,您可以为具有字符串并包装 ExecuteSqlCommand 或 SqlQuery 的数据库对象定义一个扩展方法,并将其命名为与您的存储过程相同的名称,这样它看起来像 DataContext.Database.MyStoredProcedure(paramaters)
,这样您的存储库不知道此实现细节。
也就是说,当我使用存储库模式时,存储库的目标之一是隐藏持久性的实现细节,我个人认为仅使用字符串没有问题,因为调用存储库的任何东西都是 none越聪明
我有一道题。我使用通用存储库并尝试用它调用存储过程。我知道的唯一方法是调用
DataContext.Database.ExecuteSqlCommand(sql, parameters);
或
DataContext.Database.SqlQuery<T>(sql, parameters);
将过程名称作为字符串传递。但是我的 DBContext 中已经有了这个过程。真的没有办法避免将过程名称作为字符串传递吗?
字符串类型是否存在特定问题,或者您指的是 "magic strings" 作为存储库中定义的常量?您是否愿意通过构造函数将字符串名称作为配置值传入,然后让 DI 容器提供它们?
另一种选择,您可以为具有字符串并包装 ExecuteSqlCommand 或 SqlQuery 的数据库对象定义一个扩展方法,并将其命名为与您的存储过程相同的名称,这样它看起来像 DataContext.Database.MyStoredProcedure(paramaters)
,这样您的存储库不知道此实现细节。
也就是说,当我使用存储库模式时,存储库的目标之一是隐藏持久性的实现细节,我个人认为仅使用字符串没有问题,因为调用存储库的任何东西都是 none越聪明