繁体   English   中英

使用实体框架更新表中记录列表的正确方法

[英]Proper way to update the list of records in table using entity framework

在我的教育计划数据库表中,我有一个特定学生的 3 条记录

在此处输入图片说明

所以我想从这个人列表中删除P3程序,所以在字体结束时它的显示是这样的

在此处输入图片说明

一旦我点击删除,特定的P3从前端和模型中删除,一旦点击保存按钮,它就会作为列表传递给后端代码P1P2

我正在使用实体框架进行数据库事务。

在这里寻找您的建议

  • 我是否应该删除所有现有记录,然后再次插入P1P2 或者
  • 我是否需要通过比较我发送的列表与现有记录来迭代每条记录并附加P1P2并找出丢失的一个并删除或
  • 这种类型的交易可以 EF 自己做

期待推荐哪种方式

我建议您选择第二个选项,因为它是删除丢失记录而不是删除所有记录的更好方法。

集合中的“丢失”项目不被视为被删除。

因此,您需要做的是自己标记要删除的项目。 像这样的东西:

public void Update(Programme record)
{
    var missingRows = dB.ProgrammeRows.Where(i => i.ProgrammeId == record.ProgrammeId)
                        .Except(record.Rows);
    dB.ProgrammeRows.RemoveRange(missingRows);

    dB.Programmes.Update(record);
    dB.SaveChanges();
}

该类应如下所示:

   public class ProgrammeRow
   {
        public int ProgrammeId { get; set; }
        public string ProgrammeName { get; set; }
        public int StudentId { get; set; }
        public virtual Student Student{ get; set; }
   }

   public class Programme
   {
        public int ProgrammeId { get; set; }
        private ICollection<ProgrammeRow> _rows;
        public virtual ICollection<ProgrammeRow> Rows => _rows ?? (_rows = new List<ProgrammeRow>());
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM