首页 > 解决方案 > 将文本框值与数据库值进行比较并更新到不同的表中

问题描述

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

用户日志表

用户日志表

看法 :

@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 个表?

标签: c#asp.net-mvcentity-framework

解决方案


这样的事情应该这样做:

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

推荐阅读