【发布时间】:2018-06-11 08:07:40
【问题描述】:
对于我搜索的内容,有两种方法可以将已经存在的记录插入到 ICollection 列表中:
group.Users.Add(db.Users.FirstOrDefault(x=> x.Id = 1));var to_add = new User{Id: 1}; db.Users.Attach(to_add); group.Users.Add(to_add);
上述两种方法的问题是每次我们想要添加记录时都会调用数据库。虽然我们已经知道用户的 ID 和组的 ID,但这就是创建关系所需的全部内容。
想象一下要添加一个长列表,以上两种方法都会多次调用 db。
【问题讨论】:
-
选项 1 => 因为
db.Users.FirstOrDefault(x=> x.Id = 1)选项 2 => 没有调用数据库,所以只调用了一次数据库。旁注:那里不需要附加。 -
@CodeNotFound 注意,用户模型不仅包括
Id列,还包括Name、Description等。如果我不添加它们,EF 不会给出有效性错误? -
了解正在发生的事情的最佳方式是拥有一个代表您在实际项目中真正拥有的示例代码。您还可以分析和验证您所说的内容。
-
是的,因为名称是必需的,在
group.Users.Add(to_add)上没有attachef 给出验证错误。 -
Add实现已经调用Attach所以你的错误可能是别的东西。
标签: sql sql-server entity-framework linq