我正在使用.net core 2.0构建应用程序。我有一个带有地址列表的Person对象。地址存储在地址表中。然后我有一个将Person与地址相关联的表。
class Person {
public List<PersonAddress> Addresses { get; set; }
}
class Address {
...address properties...
}
class PersonAddress{
public int AddressId { get; set; }
public Address Address { get; set; }
public int PersonId { get; set; }
public Person Person { get; set; }
}
当我使用包含地址的PersonAddress保存Person对象时,它的效果很好。它在连接表中插入新人,新地址和新记录。 (我已经在流畅的api中配置了关系。)
但是,当我尝试更新时,我遇到了问题。在加载具有地址列表的人物对象后,我可以添加,删除或更改地址,并且不会跟踪更改。
我在我的控制器中尝试了这个来处理更改:
dbContext.Entry(person.Addresses).State = EntityState.Modified;
我收到了这个错误:
The entity type 'List<PersonAddress>' was not found. Ensure that the entity type has been added to the model.
毫无疑问,该模型,所以我不知道为什么这不起作用。我骗了这个:
person.Addresses.ForEach(item => _context.Entry(item).State = EntityState.Modified);
它没关系,但这不会跟踪添加或删除,所以这还不够。
答案 0 :(得分:0)
就我而言,该方法是异步的,我收到错误消息是因为我省略了“await”关键字。请参阅附加图片,可能会有所帮助。
答案 1 :(得分:0)
对于所有想知道我做了什么来解决这个问题的人,我最终加载了旧地址列表并编写了一个算法将旧列表与新列表进行比较,检测已添加、删除和更新的内容.我相信我必须使用 .AsNoTracking()
来确保我加载的旧列表没有更新。不过已经有一段时间了,我不太记得了。
答案 2 :(得分:0)
我的问题是我有一个
var listOfItems = await DbContext.Items.ToListAsync();
DbContext.Remove(listOfItems);
看了第二遍(第 10 次)后,我意识到我需要将其更改为:
var listOfItems = await DbContext.Items.ToListAsync();
DbContext.RemoveRange(listOfItems);
所以只需要从 Remove 更改为 RemoveRange 。