在EF6中我们有这样的选择:
context.Set<TEntity>().Attach(entity);
context.Entry(entity).Collection("NavigationProperty").Load();
由于EF Core“100%严格打字”,他们已经删除了Collection功能。但应该用什么呢?
添加了: 我的意思是如何为ATTACHED实体加载包含/“导航集合属性”?
答案 0 :(得分:8)
你有两种方法。
<强> 1。渴望加载
e.g。
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ToList();
<强> 2。明确加载
e.g。
var blog = context.Blogs
.Single(b => b.BlogId == 1);
context.Posts
.Where(p => p.BlogId == blog.BlogId)
.Load();
您可以在此处详细了解:Loading Related Data
更新:
您可以对该用例使用 TrackGraph API 。这是链接:graph behavior of Add/Attach
答案 1 :(得分:3)
在Entity Framework Core v1.1中添加了显式加载。 见Microsoft Docs
来自文档:
using (var context = new BloggingContext())
{
var blog = context.Blogs
.Single(b => b.BlogId == 1);
context.Entry(blog)
.Collection(b => b.Posts)
.Load();
context.Entry(blog)
.Reference(b => b.Owner)
.Load();
}
答案 2 :(得分:1)
见下面的代码,
我在UserRef表中插入数据以及另外一个表,我们有很多关系。
public void AddUser(User user, IEnumerable<UserSecurityQuestion> securityQuestion, string password)
{
var userModel = _mapper.Map<User, UserRef>(user);
userModel.CreateTime = DateTime.Now;
userModel.UserNewsLetterMaps.ToList().ForEach(u => this._context.UserNewsLetterMaps.Add(u));
this._context.RoleRefs.Attach(new RoleRef() { RoleId = (int)user.UserRole, UserRefs = new List<UserRef> { userModel } });
userModel.ResidenceStatusRefs.ToList().ForEach(u => this._context.ResidenceStatusRefs.Attach(u));
this._context.UserRefs.Add(userModel);
this.Save();
}