实体框架是否看到数据库中已存在的对象内部的属性更改?

努克公爵

我有两个模型类:

public class Person {
        public int Id { get; set; }
        public string FirstName { get; set; }
       public virtual List<Desert> Deserts {get;set;}
}
public class Desert{
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual List<Person> Persons{get;set}
}

如果我在Seed方法中向数据库添加了一些人,并向他们添加了他们最喜欢的沙漠:

var deserts = new List<Desert>{new Desert{Name = "IceCream"}, new Desert{Name = "Cake"}}
var persons = new List<Person> { 
                         new Person{FirstName = "James", Deserts = deserts},
                         new Person{FirstName = "Joanna"}
                        };

                persons.ForEach(person => context.Persons.AddOrUpdate(person));
                context.SaveChanges();

然后在控制器调用方法的某处,该方法从人身上移除沙漠(人与沙漠之间的连接/关系):

 //removes desert from a person
 public void RemoveDesert(int personId, int desertToRemoveId) {

            Person person = db.Persons.Find(personId);
            foreach(Desert desert in person.Deserts){
                    if(desert.Id == desertToRemoveId){
                      person.Deserts.Remove(desert);

                   }
            }
            context.saveChanges();
        }

实体框架会看到该属性已public virtual List<Desert> FavouriteDeserts {get;set;}更改并更新吗?

如果不是如何Id=desertToRemoveId从一个拥有Id=personIdans的人中删除一个沙漠,并在数据库中保存更改?没有Lambda表达式可以完成吗?

恶作剧

是的,除非您不告诉子对象,否则它会跟踪子对象。

foreach(Desert desert in person.Deserts){
                    if(desert.Id == desertToRemoveId){
                      person.Deserts.Remove(desert);

                   }
            }

我认为C#不允许您在迭代时修改集合。

也就是说,您始终可以查询要删除的对象,然后将其删除:

var desertToRemove = person.Deserts.FirstOrDefault(x=> x.Id == desertToRemoveId);
if(desertToRemove != null) person.Deserts.Remove(desertToRemove );

但是请注意,这仅删除关系(人与沙漠之间的关系),而不删除子实体。阅读上在这个优秀的答案这种细微的差别在这里

另外,您需要更改要使用的类,ICollection而不是List

public virtual ICollection<Person> Persons {get; set; }
public virtual ICollection<Desert> Deserts {get; set;}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实体框架中的FirstOrDefault调用已缓存,但数据库已更改

来自分类Dev

实体框架中的FirstOrDefault调用已缓存,但数据库已更改

来自分类Dev

实体框架核心-如何检查数据库是否存在?

来自分类Dev

实体框架 6 - 使用数据库中尚不存在的对象形成关系

来自分类Dev

在实体框架中检索类的数据库计算属性

来自分类Dev

检索实体框架中类的数据库计算属性

来自分类Dev

实体框架MVC和数据库中的“静态”对象

来自分类Dev

使用实体框架从数据库中删除相关对象

来自分类Dev

如何检测数据库中是否存在实体

来自分类Dev

如何使用 ASP.NET MVC 剃刀中的实体框架检查数据库中是否存在记录?

来自分类Dev

实体框架中的SaveChanges是否将所有更改包装在数据库事务中

来自分类Dev

实体框架/Linq:有效检测数据库中是否存在所有元素

来自分类Dev

实体框架内的SaveChanges是否将所有更改包装在数据库事务中

来自分类Dev

实体框架返回数据库中不存在的实体

来自分类Dev

实体框架 - 用数据库中的列表填充多个对象,无需 foreach 每个对象

来自分类Dev

将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

来自分类Dev

将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

来自分类Dev

避免使用实体框架将空值或空值保存在数据库中

来自分类Dev

实体框架无效列(数据库或代码中不存在该列)

来自分类Dev

实体框架使用数据库或代码优先模型中不存在的列生成sql

来自分类Dev

首先在实体框架代码中初始化数据库中的对象

来自分类Dev

实体框架:如何检测数据库的外部更改

来自分类Dev

实体框架:如何检测数据库的外部更改

来自分类Dev

实体框架更改了我的默认数据库名称

来自分类Dev

实体框架数据库优先属性验证

来自分类Dev

实体框架核心,更新数据库不考虑属性

来自分类Dev

使用实体框架的导航属性更新数据库

来自分类Dev

我可以在实体框架中重新调用和更新尚未保存到数据库的已添加实体吗?

来自分类Dev

实体框架OnModelCreating-检查缺少的数据库对象

Related 相关文章

  1. 1

    实体框架中的FirstOrDefault调用已缓存,但数据库已更改

  2. 2

    实体框架中的FirstOrDefault调用已缓存,但数据库已更改

  3. 3

    实体框架核心-如何检查数据库是否存在?

  4. 4

    实体框架 6 - 使用数据库中尚不存在的对象形成关系

  5. 5

    在实体框架中检索类的数据库计算属性

  6. 6

    检索实体框架中类的数据库计算属性

  7. 7

    实体框架MVC和数据库中的“静态”对象

  8. 8

    使用实体框架从数据库中删除相关对象

  9. 9

    如何检测数据库中是否存在实体

  10. 10

    如何使用 ASP.NET MVC 剃刀中的实体框架检查数据库中是否存在记录?

  11. 11

    实体框架中的SaveChanges是否将所有更改包装在数据库事务中

  12. 12

    实体框架/Linq:有效检测数据库中是否存在所有元素

  13. 13

    实体框架内的SaveChanges是否将所有更改包装在数据库事务中

  14. 14

    实体框架返回数据库中不存在的实体

  15. 15

    实体框架 - 用数据库中的列表填充多个对象,无需 foreach 每个对象

  16. 16

    将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

  17. 17

    将JSON数据对象存储到ASP.NET MVC(实体框架)中的数据库

  18. 18

    避免使用实体框架将空值或空值保存在数据库中

  19. 19

    实体框架无效列(数据库或代码中不存在该列)

  20. 20

    实体框架使用数据库或代码优先模型中不存在的列生成sql

  21. 21

    首先在实体框架代码中初始化数据库中的对象

  22. 22

    实体框架:如何检测数据库的外部更改

  23. 23

    实体框架:如何检测数据库的外部更改

  24. 24

    实体框架更改了我的默认数据库名称

  25. 25

    实体框架数据库优先属性验证

  26. 26

    实体框架核心,更新数据库不考虑属性

  27. 27

    使用实体框架的导航属性更新数据库

  28. 28

    我可以在实体框架中重新调用和更新尚未保存到数据库的已添加实体吗?

  29. 29

    实体框架OnModelCreating-检查缺少的数据库对象

热门标签

归档