从具有参照约束的模型更新单个表,而不修改参照表

本文关键字:单个表 修改 模型 约束 更新 | 更新日期: 2023-09-27 17:58:04

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

任命.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_clients表中插入一条新记录,然后在 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

从具有参照约束的模型更新单个表,而不修改参照表

您的代码会创建一个新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);添加了一个新行,这似乎不是您需要的。