简体   繁体   English

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

[英]how to Pass parameter with dynamic model class in Ntier MVC c#

Firstly, 首先,

My controller code is ; 我的控制器代码是;

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

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

My generalservice code is ; 我的一般服务代码是;

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 code is ; menulerservice代码是;

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

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

    }

my DBIslemler code is ; 我的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; }
    }

}

Now, I want to pass void Delete( T model ) value controller to general service. 现在,我想将void Delete(T model)值控制器传递给常规服务。 But my model class ( that's T ) changeable. 但是我的模型类(即T)是可变的。 Be Sometimes void Delete ( Menu model) , sometimes void Delete( Popup model) , sometimes void Delete( News model) 有时是无效删除( 菜单模型),有时是无效删除( 弹出窗口模型),有时是无效删除( 新闻模型)

how can i do this? 我怎样才能做到这一点? Thanks. 谢谢。

From what you are saying, you want to be able to pass any entity to generalservice.Delete() . 用您的话来说,您希望能够将任何实体传递给generalservice.Delete() You can do this simply by making the Delete method generic, you do not have to make the whole generalservice class generic: 您可以通过使Delete 方法通用,而不必使整个generalservice 通用:

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

I would say however that this doesn't look like good practice. 我要说的是,这看起来并不好。 You already have a MenuService , so why not use that to delete menu objects? 您已经有了MenuService ,那么为什么不使用它来删除菜单对象呢? GeneralService looks like an unnecessary layer in between your controller and services. GeneralService看起来像控制器和服务之间不必要的层。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM