gpt4 book ai didi

c# - MVC BaseController 处理 CRUD 操作

转载 作者:行者123 更新时间:2023-11-30 12:35:31 25 4
gpt4 key购买 nike

我想重构我的基本 CRUD 操作,因为它们非常重复,但我不确定最好的方法。我所有的 Controller 都继承了 BaseController,它看起来像这样:

public class BaseController<T> : Controller where T : EntityObject
{
protected Repository<T> Repository;

public BaseController()
{
Repository = new Repository<T>(new Models.DatabaseContextContainer());
}

public virtual ActionResult Index()
{
return View(Repository.Get());
}
}

我像这样创建新的 Controller :

public class ForumController : BaseController<Forum> { }

非常简单,如您所见,我的 BaseController 包含一个 Index() 方法,这意味着我的 Controller 都有一个 Index 方法,并将加载它们各自的 View 和来自存储库的数据 - 这非常有效。我在编辑/添加/删除方法上苦苦挣扎,我的存储库中的 Add 方法如下所示:

public T Add(T Entity)
{
Table.AddObject(Entity);
SaveChanges();

return Entity;
}

再一次,很好很容易,但在我的 BaseController 中我显然不能这样做:

public ActionResult Create(Category Category)
{
Repository.Add(Category);
return RedirectToAction("View", "Category", new { id = Category.Id });
}

我通常会这样:有什么想法吗?我的大脑似乎无法通过这个.. ;-/

最佳答案

您可以添加一个由所有实体共享的接口(interface):

public interface IEntity
{
long ID { get; set; }
}

并让你的基础 Controller 需要这个:

public class BaseController<T> : Controller where T : class, IEntity

这将允许您:

public ActionResult Create(T entity)
{
Repository.Add(entity);
return RedirectToAction("View", typeof(T).Name, new { ID = entity.ID });
}

您还应该考虑使用依赖项注入(inject)来实例化您的 Controller ,以便注入(inject)您的存储库而不是手动实例化,但这是一个单独的主题。

关于c# - MVC BaseController 处理 CRUD 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com