【问题标题】:What is the best approach to update child table when updating parent table?更新父表时更新子表的最佳方法是什么?
【发布时间】:2020-06-30 04:50:41
【问题描述】:

净核心 Ef 核心。我有两个表,Schema 如下所示。

 Student table - StudentId Name Class, IsActive 
 Address Table - AddressId, City, Country, IsActive, StudentId

想法是当我将 Student IsActive 字段更新为 False 时,我也想更新相应的地址表 IsActive 也为 false。

我想到的方法是,在更新学生表后,再创建一个方法,该方法将根据学生 ID 更新地址表。例如,

UpdateStudent(int studentid)
{
     //update student
     //If success call method update AddressUpdate(int studentid)
}
AddressUpdate(int studentid)
{
    //update address table
}

我正在使用如下通用存储库模式。

public void Update(T entity)
{
    this.dbSet.Attach(entity);
    this.dbContext.Entry(entity).State = EntityState.Modified;
}

谁能告诉我有没有其他最好的方法来处理这个问题?任何帮助,将不胜感激。谢谢

【问题讨论】:

  • 这可以通过sql中的触发器来完成。但是,如果它们总是具有相同的值,为什么还要有两列呢?

标签: c# .net-core repository-pattern ef-core-3.0


【解决方案1】:

我会做不同的。 当您从数据库中获取学生详细信息时,您还必须获取地址详细信息(使用 Include 只需一次调用)

您可以将这两个字段都设置为 false,然后只执行一次 SaveChanges 来更新它。 变种 学生.isActive = false; student.address.isActive = false;

ctx.SaveChanges();

【讨论】:

  • 谢谢,看起来最好你能分享一些例子吗?
  • 另外,如果地址是列表,例如它的一对多关系,那么我们该如何处理呢?
  • 类似的东西: static void DeleteUser(int studentId) { //获取值 var student = this.dbContext.Students.FirstOrDefault(x => x.id == studentId, i => i.包括(地址));学生.isActive = false; student.address.isActive = false; this.dbContext.SaveChanges(); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 2017-12-10
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多