如何将项目添加到存储库而不将项目的父项和兄弟项目加载到内存中

时间:2017-01-21 16:59:24

标签: c# entity-framework linq linq-to-sql linq-to-entities

EntityFramework,代码优先解决方案。

我的'存储库'

public abstract class BaseEfDataRepository : DbContext
{
    public IDbSet<Account> Accounts { get; set; }
}

Account

public virtual List<User> Users { get; private set; }

如何使用Linq-To-Entities将新User添加到Account,而无需加载整个Account对象,或至少不加载整个{{1}从它设置。

我通常这样做:

Users

但是我注意到这会将整个集合加载到内存中,我想避免这种情况。

有可能吗?我有什么选择?我能想到: 在var account = context.Accounts.FirstOrDefault(acc => acc.Id == accountId); account.Users.Add(newUser); context.Save(); 中公开Users并从中添加用户。但这会给我带来所有其他问题。

还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

如果您知道Account的id值,则可以创建存根实体并将User添加到其Users集合中:

var acc = new Account { Id = accountId };
context.Accounts.Attach(acc);
acc.Users.Add(newUser);
context.SaveChanges();

由于Account.Users有一个私有的setter,我假设你在构造函数中初始化了这个集合。