目前我已经为每个数据模型获得了数据库访问类的存储库类。寻找在asp.net中处理版本库的好习惯mvc
在主页上,我需要显示来自每个存储库的前5条记录。所以在HomeController中,我需要有很多存储库成员,这不正确。有没有什么好的解决方案?
非常感谢您的帮助。欢迎任何建议!
目前我已经为每个数据模型获得了数据库访问类的存储库类。寻找在asp.net中处理版本库的好习惯mvc
在主页上,我需要显示来自每个存储库的前5条记录。所以在HomeController中,我需要有很多存储库成员,这不正确。有没有什么好的解决方案?
非常感谢您的帮助。欢迎任何建议!
你可以使用,这将聚集这五个仓库成单个b服务层有用的操作。示例:
public interface IItemsService
{
IEnumerable<Item> GetTopItems();
}
并且此服务的实施将根据需要使用尽可能多的存储库。现在你的控制器简单地变为:
public class ItemsController : Controller
{
private readonly IItemsService _itemsService;
public ItemsController(IItemsService itemsService)
{
_itemsService = itemsService;
}
public ActionResult Index()
{
var topItems = _itemsService.GetTopItems();
return View(topItems);
}
}
并在视图:
@model IEnumerable<AppName.Models.Item>
<h2>Top items</h2>
@Html.DisplayForModel()
它使用项目显示模板(~/Views/Items/DisplayTemplates/Item.cshtml
):
@model AppName.Models.Item
<div>@Model.Title</div>
您可以为基本操作创建一个通用存储库,并在为每个实体部分创建存储库时继承该存储库。
但这种方式你仍然需要5个实例或通用存储库。
所以有2种方式:
1)
创建一个存储库UniRepo
其中有像Get<T>(int id)
泛型方法等
,并在您HomeController
不要把仓库的任何实例中HomeController
,而不是
创建5个控制器每个实体,并在每个你把仓库的一个实例,该列表
,并在创建一个动作家庭/索引视图你做
@Html.Action("list","entity1");
@Html.Action("list","entity2");
@Html.Action("list","entity3");
Html.Action相当于
的RenderAction我第二达林季米特洛夫的响应。
根据我的经验,通常(在桌面开发中)有一个服务层,可以与您的存储库进行所有通话。
例如
然后从顶端你永远只能调用服务(S),其保持一切。