Asp.net 如何使此代码可重用?

Asp.net 如何使此代码可重用?,asp.net,asp.net-mvc,entity-framework,entity-framework-6,Asp.net,Asp.net Mvc,Entity Framework,Entity Framework 6,在我的应用程序中,我有一个检查,它检查一组数据库表的计数。如果每个计数都高于某个阈值,则会将属性设置为活动。下面是一个控制器示例,用户在其中添加房间信息 [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult> Create([Bind(Include = "ID,RoomTypeID,Description")] Room room, int propertyId) {

在我的应用程序中,我有一个检查,它检查一组数据库表的计数。如果每个计数都高于某个阈值,则会将属性设置为活动。下面是一个控制器示例,用户在其中添加房间信息

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Create([Bind(Include = "ID,RoomTypeID,Description")] Room room, int propertyId)
    {
        if (ModelState.IsValid)
        {
            room.ID = Guid.NewGuid();
            room.DateCreated = DateTime.Now;
            room.PropertyID = propertyId;
            db.Rooms.Add(room);
            await db.SaveChangesAsync();
            var roomCount = db.Rooms.Where(r => r.PropertyID == propertyId).Count();
            var rateCount = db.Rates.Where(r => r.PropertyID == propertyId).Count();
            var imageCount = db.PropertyImage.Where(r => r.PropertyID == propertyId).Count();
            if(roomCount >= 3 && rateCount >= 3 && imageCount >= 3)
            {
                //Set Property as ACTIVE
            }
            return RedirectToAction("Index");
        }
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建([Bind(Include=“ID,RoomTypeID,Description”)]Room-Room,int-propertyId)
{
if(ModelState.IsValid)
{
room.ID=Guid.NewGuid();
room.DateCreated=DateTime.Now;
room.PropertyID=PropertyID;
db.Rooms.Add(房间);
等待db.saveChangesSync();
var roomCount=db.Rooms.Where(r=>r.PropertyID==PropertyID.Count();
var rateCount=db.Rates.Where(r=>r.PropertyID==PropertyID.Count();
var imageCount=db.PropertyImage.Where(r=>r.PropertyID==PropertyID.Count();
如果(roomCount>=3&&rateCount>=3&&imageCount>=3)
{
//将属性设置为活动
}
返回操作(“索引”);
}
我的问题是,我想在一大堆控制器上运行此检查(3个数据库计数和'if'语句)。我不想在每个控制器上为每个操作复制此配置。此外,此检查可能容易更改,因此我只想在一个位置更新它

我应该怎样做才是最好的呢?我应该创建一些助手类吗


谢谢你,你走在正确的轨道上。你想根据你的需要,或者你的应用程序中已经建立的分离级别,尽可能地分离这个责任。至少,我会创建一个访问数据库的类,另一个包含“如果”逻辑的类决策。例如Controller->calls Helper->calls DBAccessor

我在下面(显然是错误的)给人的印象是,您只能从控制器类访问数据库?我使用的是实体框架,“助手”是正确的术语,所以我可以在谷歌上搜索,看看是否有关于这类事情的教程?我会读一些N层体系结构的书,以了解其背后的理论。对于您的具体需求,现在,请保留我的t简单,使用“助手”或“实用工具”术语可能很好。此外,在控制器之外访问数据库也是完全可以接受的。例如,有些人更喜欢只从与Web应用程序项目完全不同的项目访问数据库。这篇文章对其进行了更好的解释: