如何将修改后的字段名称存储到数据库

时间:2019-01-08 20:33:00

标签: c# asp.net asp.net-mvc

我在一个页面上有一个文本框,用于添加联系人详细信息,例如姓名,地址,电话号码和电子邮件地址。我想将修改的字段以及修改用户的名称和时间保存到数据库表中。假设如果我更改电话号码,那么应将提交的电话号码保存到数据库中。如何获取修改后的字段名称并保存到数据库中。

型号:

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 :(得分:0)

您可以创建触发器。

请参阅documentation for columns updated

您将必须在要跟踪其更新列的表上创建触发器。

然后,触发器将为您提供更新列的列表,您可以将其保留在某些元数据表中(或返回到代码-根据您的要求)。

希望这会有所帮助。

答案 1 :(得分:0)

使用以下方法只能检查和更新数据库中的记录,以便仅更改字段:

    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");
    }