有这个模型:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<User> Collection1 { get; set; } = new List<User>();
public virtual ICollection<User> Collection2 { get; set; } = new List<User>();
}
接下来,我们稍微填充我们的数据库:
var context = new UsersContext();
var user1 = new User();
var user2 = new User();
var user3 = new User();
user1.Name = "user1";
user2.Name = "user2";
user3.Name = "user3";
user1.Collection1.Add(user2);
user2.Collection1.Add(user3);
context.Users.Add(user1);
context.Users.Add(user2);
context.Users.Add(user3);
context.SaveChanges();
如您所见,我们Collection2
没有向任何人添加任何用户。
然后我提出以下要求:
var user2 = context.Users.First(user => user.Name == "user2");
foreach (var u in user2.Collection2)
Console.WriteLine($"{user2.Name} Collection2 {u.Name}");
我得到:
user2 集合 2 user1
如果我没有添加任何人,yuser2
会出现在第二个集合的什么地方?user1
你
Collection1
和Collection2
自动定义为互逆。因此,当user1 - (Collection1) - user2出现在连接上下文中时,自动添加了反馈。
OnModelCreating
如果集合是独立的而不是相互反向的——通过覆盖或通过正确的排列来调整导航属性之间的关系InversePropertyAttribute