将“文本框”值与数据库值进行比较,然后更新到其他表中

时间:2019-01-10 13:54:45

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

我正在使用实体框架4。我需要更新2个不同的表。首先,需要比较文本框中输入的值与数据库的值。如果文本框输入的值不存在或与数据库值不同,则更新2个不同的表。表1包含用户详细信息,表2包含修改后的详细信息。 假设我更新了电话号码字段,那么更新后的数据应保存在用户详细信息表中,而修改后的归档详细信息应保存在日志文件中,例如修改者,日期和文件名。

UserLog表

UserLog Table

查看:

@model ApiSample.Models.TestData
@{
    ViewBag.Title = "About";
}
<h2>@ViewBag.Title.</h2>
@using (Html.BeginForm("About", "Home", FormMethod.Post))
{
    <form>
        <p>Use this area to provide additional information.</p>
        
             <p>@Html.LabelFor(model => model.Address) @Html.TextBoxFor(model => model.Address)</p>
             <p>@Html.LabelFor(model => model.PhoneNumber) @Html.TextBoxFor(model => model.PhoneNumber)</p>
     <button type="submit" title="Submit">Upload Image</button>    
    </form>
}

型号:

    public partial class TestData
{
    public int ID { get; set; }
    public string Address { get; set; }
    public string PhoneNumber { get; set; }
}

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

控制器:

//我不知道可以用这种方式完成。

        [HttpPost]
    public ActionResult About(TestData testdata, UserLog log)
    {


        if (ModelState.IsValid)
        {
            // insert into Userlog table
            var inputUser = ConfigurationManager.AppSettings["INPUT_USER"].ToString().ToLower();
            var usr = _db.UserLogs.SingleOrDefault(u => u.ID == id);
            string date = DateTime.Now;
            usr.UserName = inputUser;
            usr.ModifiedFiledName = PhoneNumber;
            usr.Date = date;

            // update TestData table
            _db.TestDatas.Add(testdata);
            _db.Entry(testdata).State = EntityState.Added;
            _db.SaveChanges();
        }
        return RedirectToAction("About");
    }

如何更新同一控制器类中的2个表?

1 个答案:

答案 0 :(得分:0)

应该执行以下操作:

[HttpPost]
public ActionResult About(TestData testdata) //No need for UserLog model here
{


    if (ModelState.IsValid)
    {
        // insert into Userlog table
        var inputUser = ConfigurationManager.AppSettings["INPUT_USER"].ToString().ToLower();
        var usr = _db.UserLogs.SingleOrDefault(u => u.ID == id);
        string date = DateTime.Now;
        usr.UserName = inputUser;
        usr.ModifiedFiledName = PhoneNumber;
        usr.Date = date;

        _db.UserLogs.Add(usr);
        _db.Entry(usr).State = EntityState.Added;

        // update TestData table
        _db.TestDatas.Add(testdata);
        _db.Entry(testdata).State = EntityState.Added;

        //Save both tables
        _db.SaveChanges();
    }
    return RedirectToAction("About");
}