ahmed_sa Ответов: 1

Как использовать кнопку save для сохранения в обоих случаях insert и update в create action HTTP post


Проблема

Как использовать кнопку Сохранить в действии создать, чтобы сохранить в обоих случаях вставку и обновление с помощью шаблона репозитория ?

и какие изменения я внесу в виду, чтобы принять обновление и вставить .

то что я пишу это когда сделать новую запись или обновить запись а затем использовать кнопку Сохранить Она будет сохранена с помощью действия создать в контроллере сотрудника с помощью HTTP post

Я использую шаблон репозитория универсальные шаблоны в Visual студии 2017 ядра asp.net 2.1 с версии SQL Server 2012 с

Что я уже пробовал:

<pre lang="c#">public class EmployeesController : Controller
    {
        private readonly IEmployees _context;

        public EmployeesController(IEmployees context)
        {
            _context = context;
        }

        [HttpPost]
        public IActionResult Create()
        {
How to use Create Action for insert and update using repository pattern 
            return View();
        }
create view
<form asp-action="Create">

            
            <div class="form-group">
                <label asp-for="EmployeeId" class="control-label"></label>
                <input asp-for="EmployeeId" class="form-control" />
                <span asp-validation-for="EmployeeId" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="BranchCode" class="control-label"></label>
                <input asp-for="BranchCode" class="form-control" />
                <span asp-validation-for="BranchCode" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="EmployeeName" class="control-label"></label>
                <input asp-for="EmployeeName" class="form-control" />
                <span asp-validation-for="EmployeeName" class="text-danger"></span>
            </div>
            <button id="BtnSave" style="display:inline">Save</button>
        </form>
    </div>
</div>


namespace TAB.Data.InfraStructure
{
 
    public class EFRepository<T> : IRepository<T> where T : class
    {
        protected TabDbContext _context { get; set; }
        public EFRepository(TabDbContext context)
        {
            _context = context;
        }
       
     

        public virtual T Add(T t)
        {

            _context.Set<T>().Add(t);
            _context.SaveChanges();
            return t;
        }

        public virtual async Task<T> AddAsyn(T t)
        {
            _context.Set<T>().Add(t);
            await _context.SaveChangesAsync();
            return t;

        }

        public virtual T Find(Expression<Func<T, bool>> match)
        {
            return _context.Set<T>().SingleOrDefault(match);
        }

        public virtual async Task<T> FindAsync(Expression<Func<T, bool>> match)
        {
            return await _context.Set<T>().SingleOrDefaultAsync(match);
        }

        public ICollection<T> FindAll(Expression<Func<T, bool>> match)
        {
            return _context.Set<T>().Where(match).ToList();
        }

        public async Task<ICollection<T>> FindAllAsync(Expression<Func<T, bool>> match)
        {
            return await _context.Set<T>().Where(match).ToListAsync();
        }

      
        public virtual T Update(T t, object key)
        {
            if (t == null)
                return null;
            T exist = _context.Set<T>().Find(key);
            if (exist != null)
            {
                _context.Entry(exist).CurrentValues.SetValues(t);
                _context.SaveChanges();
            }
            return exist;
        }

        public virtual async Task<T> UpdateAsyn(T t, object key)
        {
            if (t == null)
                return null;
            T exist = await _context.Set<T>().FindAsync(key);
            if (exist != null)
            {
                _context.Entry(exist).CurrentValues.SetValues(t);
                await _context.SaveChangesAsync();
            }
            return exist;
        }



        public virtual void Save()
        {

            _context.SaveChanges();
        }

        public async virtual Task<int> SaveAsync()
        {
            return await _context.SaveChangesAsync();
        }

        public virtual IQueryable<T> FindBy(Expression<Func<T, bool>> predicate)
        {
            IQueryable<T> query = _context.Set<T>().Where(predicate);
            return query;
        }

1 Ответов

Рейтинг:
0

Prasad Nikumbh

Привет,

в представлении вы должны добавить одно скрытое поле,которое является основным полем базы данных.например:ID

В методе get action, то есть для рендеринга представления,вы должны получить данные из базы данных и рендерить для просмотра, чтобы вы также получили скрытый идентификатор поля.

таким образом,в методе post действия контроллера вы должны проверить, присутствует ли этот идентификатор или нет.

Если этот идентификатор присутствует, это означает, что вы обновляете его data.so вызовите метод update Entity Framework.и если ID отсутствует, вставьте данные.

Лучший способ обновления-сначала получить записи из базы данных с помощью метода respository pattern Find и, если он найден, обновить его с помощью EntityState как измененный.