标签 标签 标签

  • 一句话的事儿:

场景一:

一个联赛下有多个俱乐部,一个俱乐部有多名球员,现要求新增一个俱乐部并为该俱乐部添加成员。

分析:

既然是新增一个俱乐部,首先要查到这个俱乐部属于哪个联赛,所以先查出联赛,然后再在这个联赛中添加一个俱乐部;
俱乐部加好后,就需要添加球员,而Club属性中只有List,所以要通过形式添加球员。

代码

  1. var serieA = context.Leagues.SingleOrDefault(x => x.Name == "Serie A");
  2. var juventus = new Club
  3. {
  4. League = serieA,
  5. Name = "Juventus",
  6. City = "Torino",
  7. DateOfEstablishment = new DateTime(1897, 11, 1),
  8. Players = new List<Player>
  9. {
  10. new Player
  11. {
  12. Name="C.Ronaldo",
  13. DateOfBirth=new DateTime(1985,2,5)
  14. }
  15. }
  16. };
  17. context.Clubs.Add(juventus);
  18. int count = context.SaveChanges();
  19. Console.WriteLine(count);

image.png

场景二:

现在需要向某个举了新增加一名球员

  1. //01.首先查出新增球员对应的俱乐部
  2. var juventus = context.Clubs.SingleOrDefault(x => x.Name == "Juventus");
  3. //02.然后再这个俱乐部添加球员
  4. juventus.Players.Add(new Player
  5. {
  6. Name = "Gonzalo Higuain",
  7. DateOfBirth = new DateTime(1987, 12, 10)
  8. });
  9. int count = context.SaveChanges();
  10. Console.WriteLine(count);

image.png

场景三:

由于实际场景中,有些数据可能不能被追踪,比如前端传过来的数据,就不能被追踪,这里我采用建立两个dataContext来模拟,相较于newDataContex另一个context就是离线状态的

  1. var juventus = context.Clubs.SingleOrDefault(x => x.Name == "Juventus");
  2. juventus.Players.Add(
  3. new Player
  4. {
  5. Name = "Matthijs de Ligt",
  6. DateOfBirth = new DateTime(1999, 12, 18)
  7. });
  8. {
  9. using var newDataContext = new DataContext();
  10. newDataContext.Clubs.Update(juventus);
  11. int count = newDataContext.SaveChanges();
  12. Console.WriteLine(count);
  13. }

image.png
不难看出,在第二步的时候,我们只是新增加一名球员而已,不要更新所有俱乐部所有属性,那么接下来我们介绍另一种变化追踪的方法->Attach

变化追踪

  • Add
  • Update
  • Remove
  • Attach

    更改Attach方法

    1. newDataContext.Clubs.Attach(juventus);

    结论是之前02.的update没有了

    image.png

    场景四:

    给球员添加简历

    步骤1:将Resume添加到DataContext

    1. public DbSet<Resume> Resumes { get; set; }

    步骤2:将数据迁移add-migration->update-database

    image.png

    步骤3:为PlayerId=1的球员添加简历

    ```csharp var resume = new Resume { PlayerId = 1, Description = “resume …” };

context.Resumes.Add(resume); int count = context.SaveChanges(); Console.WriteLine(count); ``` image.png
image.png


  • 本文作者:GeekPower - Felix Sun
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!