标签 标签 标签
- 一句话的事儿:
场景一:
一个联赛下有多个俱乐部,一个俱乐部有多名球员,现要求新增一个俱乐部并为该俱乐部添加成员。
分析:
既然是新增一个俱乐部,首先要查到这个俱乐部属于哪个联赛,所以先查出联赛,然后再在这个联赛中添加一个俱乐部;
俱乐部加好后,就需要添加球员,而Club属性中只有List
代码
var serieA = context.Leagues.SingleOrDefault(x => x.Name == "Serie A");
var juventus = new Club
{
League = serieA,
Name = "Juventus",
City = "Torino",
DateOfEstablishment = new DateTime(1897, 11, 1),
Players = new List<Player>
{
new Player
{
Name="C.Ronaldo",
DateOfBirth=new DateTime(1985,2,5)
}
}
};
context.Clubs.Add(juventus);
int count = context.SaveChanges();
Console.WriteLine(count);
场景二:
现在需要向某个举了新增加一名球员
//01.首先查出新增球员对应的俱乐部
var juventus = context.Clubs.SingleOrDefault(x => x.Name == "Juventus");
//02.然后再这个俱乐部添加球员
juventus.Players.Add(new Player
{
Name = "Gonzalo Higuain",
DateOfBirth = new DateTime(1987, 12, 10)
});
int count = context.SaveChanges();
Console.WriteLine(count);
场景三:
由于实际场景中,有些数据可能不能被追踪,比如前端传过来的数据,就不能被追踪,这里我采用建立两个dataContext来模拟,相较于newDataContex另一个context就是离线状态的
var juventus = context.Clubs.SingleOrDefault(x => x.Name == "Juventus");
juventus.Players.Add(
new Player
{
Name = "Matthijs de Ligt",
DateOfBirth = new DateTime(1999, 12, 18)
});
{
using var newDataContext = new DataContext();
newDataContext.Clubs.Update(juventus);
int count = newDataContext.SaveChanges();
Console.WriteLine(count);
}
不难看出,在第二步的时候,我们只是新增加一名球员而已,不要更新所有俱乐部所有属性,那么接下来我们介绍另一种变化追踪的方法->Attach
变化追踪
- Add
- Update
- Remove
- Attach
更改Attach方法
newDataContext.Clubs.Attach(juventus);
结论是之前02.的update没有了
场景四:
给球员添加简历步骤1:将Resume添加到DataContext
public DbSet<Resume> Resumes { get; set; }
步骤2:将数据迁移add-migration->update-database
步骤3:为PlayerId=1的球员添加简历
```csharp var resume = new Resume { PlayerId = 1, Description = “resume …” };
context.Resumes.Add(resume);
int count = context.SaveChanges();
Console.WriteLine(count);
```
- 本文作者:GeekPower - Felix Sun
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!