Как сохранить измененное имя поля в базе данных - PullRequest
0 голосов
/ 08 января 2019

У меня есть страница, где у меня есть текстовые поля для добавления контактных данных, таких как имя, адрес, номер телефона и адрес электронной почты. Я хочу сохранить в таблицу базы данных, поле которого изменяется вместе с именем измененного пользователя и временем. предположим, что если я изменю номер телефона, то сохраненный номер телефона должен быть сохранен в БД. Как получить измененное имя поля и сохранить в БД.

Модель:

public partial class Log
{
    public int ID { get; set; }
    public string UserName { get; set; }
    public string ModeifiedField { get; set; }
    public Nullable<System.DateTime> Date { get; set; }
}

Контроллер:

        private readonly LogEntities _db = new LogEntities();

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

    [HttpPost]
    public ActionResult Index(Log model)
    {

        if (ModelState.IsValid)
        {

            _db.UserActivityLogs.Add(model);
            _db.Entry(model).State = EntityState.Added;
            _db.SaveChanges();

        }
        return RedirectToAction("Index");
    }

Просмотр:

@model Sample.Models.Log

@{
    ViewBag.Title = "Index";
  
}
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    <form>

        @Html.AntiForgeryToken()
        @Html.HiddenFor(model => model.Date, new { @Value = @DateTime.Now.ToShortDateString()})
        @Html.HiddenFor(model => model.UserName, new { @Value = @User.Identity.Name })
        @Html.HiddenFor(model => model.ModifiedField, new { @Value = @ViewBag.ModifiedField, })
        <br />
        <br />

        <p>@Html.TextBoxFor(model => model.Name)</p>
        <p>@Html.TextBoxFor(model => model.Address)</p>
        <p>@Html.TextBoxFor(model => model.PhoneNumber)</p>
       <p>@Html.TextBoxFor(model => model.Emailaddress)</p>
        <button type="submit" title="Submit">Upload Image</button>

        @ViewBag.Message
    </form>
}

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Чтобы проверить и обновить записи в базе данных только для измененных полей, можно добиться следующим образом:

    private readonly LogEntities _db = new LogEntities();
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(Log model)
    {
        if (ModelState.IsValid)
        {
            var existingLog = _db.UserActivityLogs.Where(x => x.ID == model.ID).FirstOrDefault();
            if (existingLog == null)   //Create Case
            {
                _db.UserActivityLogs.Add(model);
                _db.Entry(model).State = EntityState.Added;
                _db.SaveChanges();
            }
            else                      //Update Case
            {
                _db.UserActivityLogs.Attach(model);

                //Check for each property and set the IsModified flag to true only for updated records
                if (model.UserName != existingLog.UserName)
                {
                    _db.Entry(model).Propert(x=> x.UserName).IsModified = true;
                }
                _db.SaveChanges();
            }
        }
        return RedirectToAction("Index");
    }
0 голосов
/ 09 января 2019

Вы можете создавать триггеры.

Пожалуйста, обратитесь к документации для обновленных столбцов .

Вам нужно будет создать триггер для таблиц, для которых вы хотите отслеживать обновленные столбцы.

Тогда триггер выдаст вам список обновленных столбцов, которые вы можете сохранить в некоторой таблице метаданных (или вернуться к коду - в зависимости от ваших требований).

Надеюсь, это поможет.

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