【问题标题】:Update single table from a Model with referential constraint without modifying referenced table从具有引用约束的模型更新单个表而不修改引用表
【发布时间】:2016-11-23 21:17:27
【问题描述】:

我有一个非常具体的问题。 以下是appointments.csvalid_clients.cs 的两个型号。这两个模型都映射到两个数据库表。

appointmnets.cs .引用valid_clients.cs

public  partial class appointments
    {

        public int appt_client_id { get; set; }

        public int customer_id { get; set; }

        [Key]
        public int appt_id { get; set; }

        public DateTime appt_date_time { get; set; }

        [ForeignKey("appt_client_id")]
        public virtual valid_clients Client { get; set; }

    }

valid_clients.cs

 public partial class valid_clients
    {

        [Key]
        public int client_id { get; set; }

        [Required]
        [StringLength(30)]
        public string client_name { get; set; }

        public bool valid_client { get; set; }
}

现在,我需要更新数据库中appointments 表中的一条记录。我在控制器方法中有以下代码进行更新。但是此代码也在valid_clientstable 中插入一条新记录,然后在appointments 中插入一条新记录。

[HttpPost] 
        public ActionResult Confirm1(appointments appointment,string submit)
        {
            using (var db1 = new appointmentContext()){
                appointments app = db1.appointments.Single(d => d.appt_id == appointment.appt_id);
                app = appointment;
                app.appt_status = "RESCHED";
                app.time_stamp = DateTime.Now;

                //Saving the changes in the database
                try
                {
                    db.appointments.Add(app);
                    db.SaveChanges();
                }

                catch (System.Data.Entity.Validation.DbEntityValidationException e)
                {

                }
            }
            return View("Edit", appointment);
        }

问题: 如何保持我的模型结构不变,只更新appointments 表中的一条记录而不修改valid_clients 表。

【问题讨论】:

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


    【解决方案1】:

    您的代码会创建一个新的appointments。它不会更新现有的。

    如果要更新模型,请执行以下操作:

    appointments app = db1.appointments.Single(d => d.appt_id == appointment.appt_id);
    app.appt_status = "RESCHED";
    app.time_stamp = DateTime.Now;
    app.OtherValue = appointment.OtherValue;
    db.SaveChanges();
    

    你省略了这些行:

    app = appointment;
    db.appointments.Add(app);
    

    app = appointment; 实际上并没有编辑您选择的appointments。它只是将app 更改为指向另一个。

    db.appointments.Add(app); 添加了一个新行,adn 似乎不是您需要的。

    【讨论】:

    • 我按照你说的做了修改,但是没有更新现有记录
    • @RudraniAngira 您当前的代码是什么样的,您正在寻找什么来确保您的记录得到更新?
    • 我一直在使用 db 而不是 db1。哈哈。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多