当对象添加到同一上下文中时,实体框架不返回代理

时间:2015-04-23 13:19:16

标签: entity-framework entity-framework-6

我有一个班级:

public class Company
{    
    public System.Guid Id { get; set; }
    public Nullable<System.Guid> CreatedById { get; set; }    
    public virtual Users CreatedBy { get; set; }
}

我正在将Company类的新对象添加到上下文并设置CreatedById字段:

var newCompanyId = Guid.NewGuid();
var company = new Company();
company.Id = newCompanyId;
company.CreatedById = someId;

Context.Set<Company>().Add(company);

然后我使用相同的上下文来检索公司:

var retrievedCompany = Context.Set<Company>().FirstOrDefault(item => item.Id == newCompanyId);

retrievedCompany的类型为Company,并且它不是动态代理,因此名为CreatedBy的导航属性不起作用。

是否有可能获得代理?

1 个答案:

答案 0 :(得分:2)

您需要使用Create()让实体框架了解您的新实体,而不是仅仅实例化Company的实例。你可以使用

var company = ContextSet<Company>().Create();

创建Company类型的新实例,然后将其添加到上下文中。将对象添加到上下文时,它将尝试自动获取导航属性,以便在SaveChanges()之前填充它。

然后,您将能够在稍后的同一个上下文实例中使用该导航属性。