如何在Ntier MVC c#中使用动态模型类传递参数

时间:2015-11-12 10:36:44

标签: c# asp.net-mvc entity-framework n-tier-architecture

首先,

我的控制器代码是;

public ActionResult Menuler_Delete(int id)
        {
           Menuler val = general_service.getMenu(id);
            general_service.Delete(val);

            return RedirectToAction("Menuler", "Admin");
         }

我的通用服务代码是;

public Menuler getMenu(int id)
        {
            MenulerService mservice = new MenulerService();

            return mservice.getMenu(id);

        }
        public void Delete( T model ) 
        {
            DbIslemler<T> islem = new DbIslemler<T>();
            islem.Delete(model);
        }

menulerservice代码是;

public class MenulerService
    {
        DbIslemler<Menuler> menuler_service = new DbIslemler<Menuler>();

        public Menuler getMenu( int id)
        {
           return menuler_service.Find(id);
        }

    }

我的DBIslemler代码是;

public class DbIslemler<T> : IDbIslemler<T> where T : class
    {
 public void Delete(T model)
        {
            _database.Set<T>().Remove(model);
            _database.SaveChanges();
        }

        public void Delete(object id)
        {
            T val = _database.Set<T>().Find(id);
            _database.Set<T>().Remove(val);
            _database.SaveChanges();
        }

public T Find(object id)
        {
           return _database.Set<T>().Find(id);

        }
}

namespace NTierMvc.DataAccess
{
    public class DataBase : DbContext
    {

        public DbSet<Popup> Popups { get; set; }

        public DbSet<New> News{ get; set; }

        public DbSet<Menuler> Menulers { get; set; }
    }

}

现在,我想将 void Delete(T model)值控制器传递给一般服务。但是我的模型类(那是T)可以改变。有时无效删除(菜单模型),有时无效删除(弹出模型),有时无效删除(新闻模型)

我该怎么做? 感谢。

1 个答案:

答案 0 :(得分:1)

根据您的说法,您希望能够将任何实体传递给generalservice.Delete()。您只需将Delete 方法设为通用,即可完成此操作,您无需将整个通用服务设为通用:

public class GeneralService
{
    public void Delete<T>( T model ) 
    {
        DbIslemler<T> islem = new DbIslemler<T>();
        islem.Delete(model);
    }
}

但我会说,这看起来不太好。您已经有MenuService,为什么不使用它来删除菜单对象? GeneralService看起来像是控制器和服务之间不必要的层。