我在Assignment和User
之间有多对多的关系当尝试从作业中删除用户时,我看到所有用户都已加载到该集合中。
如何避免这种情况?
public class User
{
public virtual int Id { get; private set; }
public virtual IList<Assignment> Assignments { get; set; }
}
public class Assignment
{
public virtual int Id { get; private set; }
public virtual ICollection<User> Users { get; set; }
}
映射:
HasManyToMany(user => user.Assignments).Table("UserToAssignment").ParentKeyColumn("UserId").ChildKeyColumn("AssignmentId").Inverse().ExtraLazyLoad();
HasManyToMany(productAssignment => productAssignment.Users).AsSet().Table("UserToAssignment").ParentKeyColumn("AssignmentId").ChildKeyColumn("UserId").LazyLoad();
致电代码:
assignment.Users.Remove(user)
最初我使用Bag代替Set for Assignment映射,但是在更新它时,它正在删除然后在AssignmentsToUsers表中重新插入很多行。所以我改用了Set。
但现在我发现使用Set有问题:它将所有数据都带入内存。
建议的方法是什么?
答案 0 :(得分:1)
你无法避免这种情况,如果性能可以接受,我会忽略它。如果性能有问题,我可以通过三种方式来解决它:
答案 1 :(得分:0)
你也应该为Assignment.Users使用额外的延迟模式。