Соединение между Kendo и SQL сервером в ASP. NET Core - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь выполнить операцию CRUD, используя Kendo UI, чтобы показать мои данные в виде сетки. Я могу прочитать данные из моей базы данных с помощью следующего кода в моем контроллере (мои таблицы находятся на SQL сервере и подключены через строку подключения):

    [Area("Admin")]
    public class HeaderMenuController : Controller
    {
        private readonly IUnitOfWork _unitOfWork;

        public HeaderMenuController(IUnitOfWork unitOfWork)
        {
            _unitOfWork = unitOfWork;
        }

        public IActionResult Index()
        {
            return View();
        }

        public DataSourceResult Products_Read([DataSourceRequest] DataSourceRequest request)
        {
            return _unitOfWork.HeaderMenu.GetAll().ToDataSourceResult(request);
        }
    }

index.cs html



@(Html.Kendo().Grid<MSDACE.Models.HeaderViewModel>()
         .Name("grid")
         .Columns(columns =>
         {
             columns.Bound(product => product.HeaderMenuID).Width(100);
             columns.Bound(product => product.HeaderMenuName);
             columns.Bound(product => product.HeaderMenuDispOrder).Width(250);
             columns.Command(commands =>
             {
                 commands.Destroy(); // The "destroy" command removes data items.
             }).Title("Commands").Width(200);
         })
         .ToolBar(toolbar =>
         {
             toolbar.Create(); // The "create" command adds new data items.
             toolbar.Save(); // The "save" command saves the changed data items.
         })
         .Editable(editable => editable.Mode(GridEditMode.InCell)) // Use in-cell editing mode.
         .DataSource(dataSource =>
             dataSource.Ajax()
               .Batch(true) // Enable batch updates.
               .Model(model =>
               {
                   model.Id(product => product.HeaderMenuID); // Specify the property which is the unique identifier of the model.
                   model.Field(product => product.HeaderMenuID).Editable(false); // Make the ProductID property not editable.
               })
               .Create(create => create.Action("Products_Create", "HeaderMenu")) // Action method invoked when the user saves a new data item.
               .Read(read => read.Action("Products_Read", "HeaderMenu"))  // Action method invoked when the Grid needs data.
               .Update(update => update.Action("Products_Update", "HeaderMenu"))  // Action method invoked when the user saves an updated data item.
               .Destroy(destroy => destroy.Action("Products_Destroy", "HeaderMenu")) // Action method invoked when the user removes a data item.
         )
         .Pageable()
)

Проблема в том, что я не могу удалить или создать операцию.

Я написал GetAll, Remove, Get и другие функции, но моя проблема - отразить в сетке кендо

IUnitOfWork.cs

public interface IUnitOfWork : IDisposable
    {

        IHeaderMenuRepository HeaderMenu { get; }

        void Save();

    }

IHeaderMenuRepository.cs

 public class HeaderMenuRepository : Repository<HeaderMenu>, IHeaderMenuRepository
    {
        private readonly ApplicationDbContext _db;
        public HeaderMenuRepository(ApplicationDbContext db) : base(db)
        {
            _db = db;
        }

        public IEnumerable<SelectListItem> GetHeaderMenuList()
        {
            return _db.HeaderMenu.Select(i => new SelectListItem()
            {
                Text = i.HeaderMenuName,
                Value = i.HeaderMenuID.ToString()
            });
        }

        public void Update(HeaderMenu headerMenu)
        {
            var objFrobDb = _db.HeaderMenu.FirstOrDefault(s => s.HeaderMenuID == headerMenu.HeaderMenuID);

            objFrobDb.HeaderMenuName = headerMenu.HeaderMenuName;
            objFrobDb.HeaderMenuDesc = headerMenu.HeaderMenuDesc;
            objFrobDb.HeaderMenuActive = headerMenu.HeaderMenuActive;
            objFrobDb.HeaderMenuDispOrder = headerMenu.HeaderMenuDispOrder;

            _db.SaveChanges();
        }

IRepository

 public interface IRepository<T> where T : class
    {
        T Get(int id);

        IEnumerable<T> GetAll(
            Expression<Func<T, bool>> filter = null,
            Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
            string includeProperties = null
            );

        T GetFirstOrDefault(
            Expression<Func<T, bool>> filter = null,
            string includeProperties = null
            );

        void Add(T entity);

        void Remove(int id);
        void Remove(T entity);
    }

UnitOfWork.cs


 public class UnitOfWork : IUnitOfWork
    {

        private readonly ApplicationDbContext _db;

        public UnitOfWork(ApplicationDbContext db)
        {
            _db = db;
            HeaderMenu = new HeaderMenuRepository(_db);
        }

        public IHeaderMenuRepository HeaderMenu { get; private set; }

        public void Dispose()
        {
            _db.Dispose();
        }

        public void Save()
        {
            _db.SaveChanges();
        }
    }

Repository.cs


public class Repository<T> : IRepository<T> where T : class
    {
        protected readonly DbContext Context;
        internal DbSet<T> dbSet;

        public Repository(DbContext context)
        {
            Context = context;
            this.dbSet = context.Set<T>();
        }

        public void Add(T entity)
        {
            dbSet.Add(entity);
        }

        public T Get(int id)
        {
            return dbSet.Find(id);
        }

        public IEnumerable<T> GetAll(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = null)
        {
            IQueryable<T> query = dbSet;

            if (filter != null)
            {
                query = query.Where(filter);
            }
            //include properties will be comma seperated
            if (includeProperties != null)
            {
                foreach (var includeProperty in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    query = query.Include(includeProperty);
                }
            }

            if (orderBy != null)
            {
                return orderBy(query).ToList();
            }
            return query.ToList();
        }

        public T GetFirstOrDefault(Expression<Func<T, bool>> filter = null, string includeProperties = null)
        {
            IQueryable<T> query = dbSet;

            if (filter != null)
            {
                query = query.Where(filter);
            }
            //include properties will be comma seperated
            if (includeProperties != null)
            {
                foreach (var includeProperty in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    query = query.Include(includeProperty);
                }
            }

            return query.FirstOrDefault();
        }

        public void Remove(int id)
        {
            T entityToRemove = dbSet.Find(id);
            Remove(entityToRemove);
        }

        public void Remove(T entity)
        {
            dbSet.Remove(entity);
        }

    }

HeaderMenuRepository.cs


  public class HeaderMenuRepository : Repository<HeaderMenu>, IHeaderMenuRepository
    {
        private readonly ApplicationDbContext _db;
        public HeaderMenuRepository(ApplicationDbContext db) : base(db)
        {
            _db = db;
        }

        public IEnumerable<SelectListItem> GetHeaderMenuList()
        {
            return _db.HeaderMenu.Select(i => new SelectListItem()
            {
                Text = i.HeaderMenuName,
                Value = i.HeaderMenuID.ToString()
            });
        }

        public void Update(HeaderMenu headerMenu)
        {
            var objFrobDb = _db.HeaderMenu.FirstOrDefault(s => s.HeaderMenuID == headerMenu.HeaderMenuID);

            objFrobDb.HeaderMenuName = headerMenu.HeaderMenuName;
            objFrobDb.HeaderMenuDesc = headerMenu.HeaderMenuDesc;
            objFrobDb.HeaderMenuActive = headerMenu.HeaderMenuActive;
            objFrobDb.HeaderMenuDispOrder = headerMenu.HeaderMenuDispOrder;

            _db.SaveChanges();
        }
    }

ApplicationDbContext.cs



 public class ApplicationDbContext : IdentityDbContext<IdentityUser>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            // Customize the ASP.NET Identity model and override the defaults if needed.
            // For example, you can rename the ASP.NET Identity table names and more.
            // Add your customizations after calling base.OnModelCreating(builder);
        }

        public DbSet<HeaderMenu> HeaderMenu { get; set; }


    }

Проблема в том, что я не могу удалить , Операция создания или редактирования!

Я верю, что не могу установить соединение между Kendo и моей базой данных и что-то необходимо реализовать в моем контроллере.

Я пробую Kendo. MVC примеры, но проблема в том, что используется северный ветер и sqllite!

Не могли бы вы мне помочь? Проблема с реализацией CRUD в Grid с использованием данных в моих таблицах sqlserver.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...