ASP.NET MVC – 在何处放置数据库查询
发布时间:2020-12-16 04:04:59 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试学习ASP.NET MVC 4,我很困惑我应该把数据库查询放在哪里.我有 PHP的背景,特别是CodeIgniter,我习惯于将所有数据库查询放入模型中.我有这个问题: db.Orders.Where(order = order.columnName == columnName).SingleOrDefault(); 基于这个ASP.NET tu
我正在尝试学习ASP.NET MVC 4,我很困惑我应该把数据库查询放在哪里.我有
PHP的背景,特别是CodeIgniter,我习惯于将所有数据库查询放入模型中.我有这个问题:
db.Orders.Where(order => order.columnName == columnName).SingleOrDefault(); 基于这个ASP.NET tutorial,我应该把它放在控制器中.但是,我发现这个StackOverflow question,它说我应该把它放在模型中(类似于我以前用PHP做的).对同一问题的另一个答案提到了创建包含所有查询的存储库模式/类. 所以我的问题是,在代码维护(可读性,更改效果等)方面,以下选项的优缺点是什么? >控制器中的查询 解决方法
使用存储库模式处理此问题的简单方法.这不是最好的方法.但是会告诉您如何使用存储库模式处理这个问题.
创建一个存储库来执行所有数据库事务 public interface IRepository { Order GetOrder(int orderId); } public class Repository : IRepository { YourDBContext db; public Repository() { db = new YourDBContext (); } public User GetOrder(int orderId) { return db.Orders.FirstOrDefault(s=>s.OrderID==orderId); } } 您可以在同一个项目中创建它(在“数据访问逻辑”下)或为此创建一个单独的类库(并将其引用到您使用它的任何地方). 现在在您的控制器中,在导入必要的命名空间后,只需创建存储库的对象并调用您感兴趣的方法即可 public OrderController :Controller { protected IRepository repo; public OrderController() { repo=new Repository(); } public OrderController(IRepository repositary) { // This constructor is for your Unit test project,// you can pass a mock repository here // Read dependency injection repo=repository; } public ActionResult details(int id) { var order=repo.GetOrder(id); if(order!=null) { return View(order); } } } 如果认为您的视图需要它,您可以考虑使用视图模型.在这种情况下,您需要从域对象中读取属性值,并将其设置为视图模型的实例并将其返回到视图. 随着代码/功能的增长,您可以将代码移动到不同的类/层/项目. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- query-string – asp .net 2.0上的最大查询字符串长度
- query-string – Asp.net 5 mvc 6获取要查看的查询字符串
- asp.net – 将自动Web测试集成到构建过程中
- [ASP.Net]用RssToolKit2.0解析RSS,制作RSS阅读器
- ASP.NET中的BackgroundWorker线程
- 将ASP.NET验证与JQuery相结合的优雅方式
- Asp.net .net(C#) 获取当前命名空间,类名,方法名的方法
- asp.net-mvc – 根据需要设置RenderSection:false,但仍抛出
- asp.net-mvc-4 – 尝试在displaytemplate中访问父视图模型的
- asp.net – 如何在客户端验证失败后保持滚动位置?