Context.Entry()。GetDatabaseValues()方法不复制实体的子节点

时间:2015-09-28 20:22:49

标签: c# entity-framework

我正在使用Entity Framework开发WPF项目。我使用Context.Entry().GetDatabaseValues()方法获取要更新的对象的原始对象值。 .GetDatabaseValues()方法返回内部对象为空值的原始值

如下:

public partial class LabPayments 
{
   public partial class LabAccount
   {
    public long ID { get; set; }
    public Nullable<long> MaterialID { get; set; }
    public Nullable<long> LabID { get; set; }
    public Nullable<double> Quantity { get; set; }
    public Nullable<System.DateTime> MaterialDate { get; set; }
    public Nullable<long> LabMaterialPriceID { get; set; }
    public Nullable<decimal> Price { get; set; }

    public virtual Lab Lab { get; set; }
    public virtual LabMaterial LabMaterial { get; set; }
    public virtual LabMaterialPrice LabMaterialPrice { get; set; }
}

返回的虚拟对象值为null !!

1 个答案:

答案 0 :(得分:1)

来自MSDN:

  

查询数据库,查找当前存在于数据库中的被跟踪实体的值的副本    <子> https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.getdatabasevalues(v=vs.113).aspx

using (var context = new BloggingContext()) 
{ 
    var blog = context.Blogs.Find(1); 

    var clonedBlog = context.Entry(blog).GetDatabaseValues().ToObject(); 
}
     

请注意,返回的对象不是实体,并且未被上下文跟踪。返回的对象也没有任何与其他对象设置的关系    <子> https://msdn.microsoft.com/en-us/data/jj592677.aspx

GetDatabaseValues仅为被跟踪的实体获取,而不是任何导航属性或集合属性,它们只是关系/关联的表示。这些虚拟属性是对相关实体对象的引用,不会与GetDatabaseValues一起返回。