最简单的方法有一个仓库模式来处理这个问题。这不是最好的办法。但会给你一个想法,你可以如何处理与存储库模式。
创建一个存储库做你所有的数据库事务
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);
}
}
}
的方法,如果认为您的观点,您可以考虑使用一个视图模型需要它。在这种情况下,您需要从您的域对象读取属性值并将其设置为您的视图模型的实例并将其返回到您的视图。
随着代码/功能的增长,您可以将代码移动到不同的类/图层/项目。
我们使用的设置是我们的数据是在模型中定义的,我们的查询是在我们称之为服务的类中定义的,控制器处理所有事情。所以在控制器上创建一个新模型,然后调用服务来填充模型,然后将填充的模型传递给视图 –