EfCore在Add上包含相关对象

时间:2017-03-24 15:20:55

标签: c# .net entity-framework

我想这样做,但是entry.Entity.User是NULL。

export interface TbArr {
   id:number;
   date:any;
}

我可以用

显式加载用户
var entry = this.myContext.Verifications.Add(new DbVerification()
        {
            UserId = model.UserId,
            Created = DateTimeOffset.UtcNow,
            Method = model.VerificationType
        });
entry.Entity.User.FirstName = "peanut";

但是我可以在某种程度上包含entry.Entity.User对象而不这样做吗?

就像我可以做到这一点

this.myContext.Users.First(x => x.Id == model.UserId)

要在实体中包含用户对象,无论如何都要使用context.Verifications.Add以类似的方式包含它,如上所示。

1 个答案:

答案 0 :(得分:2)

您可以做的一件事是使用 明确加载

var entry = this.myContext.Verifications.Add(new DbVerification()
        {
            UserId = model.UserId,
            Created = DateTimeOffset.UtcNow,
            Method = model.VerificationType
        });
context.Entry(entry.Entity).Reference(p => p.User).Load();// Add this line
entry.Entity.User.FirstName = "peanut";

但最后如果你没有内存中的用户实体实例,你将需要进行往返访问以获取用户并进行更改,因此没有太大的差异比较有了这个:

var entry = this.myContext.Verifications.Add(new DbVerification()
            {
                UserId = model.UserId,
                Created = DateTimeOffset.UtcNow,
                Method = model.VerificationType
            });
var user=this.myContext.Users.First(x => x.Id == model.UserId);
user.FirstName = "peanut";
myContext.SaveChanges();