Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架惰性和急切加载返回System.Data.Entity.DynamicProxies.PropertyName_C#_Entity Framework_Linq_Datagridview - Fatal编程技术网

C# 实体框架惰性和急切加载返回System.Data.Entity.DynamicProxies.PropertyName

C# 实体框架惰性和急切加载返回System.Data.Entity.DynamicProxies.PropertyName,c#,entity-framework,linq,datagridview,C#,Entity Framework,Linq,Datagridview,我正在使用代码优先的方法学习实体框架。我有两个类别,它们之间的关系为一对多: public class Product { [Key] public int ProductID { get; set; } public string ProductName { get; set; } //Foreign Key -----> To establish relationship btw two tables. public int Categor

我正在使用代码优先的方法学习实体框架。我有两个类别,它们之间的关系为一对多:

public class Product
{
    [Key] 
    public int ProductID { get; set; } 
    public string ProductName { get; set; }

    //Foreign Key -----> To establish relationship btw two tables.
    public int CategoryID { get; set; }
    // A product belongs to a ----> Category
    public virtual ProductCategory Category { get; set; }

}

public class ProductCategory
{
    [Key] //PK
    public int CategoryID { get; set; }
    public string CategoryName { get; set; }
    // A Category ----> has many products (List of Products)
    public virtual List<Product> ProductList { get; set; }    
}
dataGridView上的两个查询的结果都显示了客户的列return
System.Data.Entity.DynamicProxies.ProductCategory


我到底做错了什么?为什么即使使用Include也无法检索包含所有产品的类别。

通过将子类导航属性标记为virtual,EF将使用代理包装引用,以启用延迟加载和更改跟踪,无论您是否渴望加载。如果删除虚拟声明,它将把引用保留为“Category”,但是您需要始终加载该属性,否则它将返回为#null。然而,在大多数情况下,您不应该这样做,因为使用EF的目的是为了像更改跟踪这样的事情

进一步阐述Peter&Robert的建议:

var pppp = db.products.Include(p => p.Category).ToList();
foreach(var p in pppp)
{
  if (p.Category != null)
    Console.WriteLine(p.Category.CategoryName); // not WriteLine(p.Category)
}
或者将以下内容添加到您的类别类:

public override string ToString()
{
   return CategoryName;
}

当您将一个对象传递到WriteLine等函数中,这些函数希望处理字符串时,该代码将针对其他类型调用.ToString()。类上.ToString()的默认行为是返回类型名。

通过将子类导航属性标记为虚拟,EF将使用代理包装引用,以启用延迟加载和更改跟踪,无论您是否渴望加载。如果删除虚拟声明,它将把引用保留为“Category”,但是您需要始终加载该属性,否则它将返回为#null。然而,在大多数情况下,您不应该这样做,因为使用EF的目的是为了像更改跟踪这样的事情

进一步阐述Peter&Robert的建议:

var pppp = db.products.Include(p => p.Category).ToList();
foreach(var p in pppp)
{
  if (p.Category != null)
    Console.WriteLine(p.Category.CategoryName); // not WriteLine(p.Category)
}
或者将以下内容添加到您的类别类:

public override string ToString()
{
   return CategoryName;
}

当您将一个对象传递到WriteLine等函数中,这些函数希望处理字符串时,该代码将针对其他类型调用.ToString()。类上.ToString()的默认行为是返回类型名。

但它确实返回了!因为它是一个复杂类型,所以它将显示类别的字符串表示形式。您应该设置列的正确字段名,如CategoryName。将category列绑定到类似
Eval(“category.CategoryName”)
@PeterBons@Robert McKee我尝试过:
var pppp=db.products.Include(p=>p.category.CategoryName).ToList()
但有一个例外,
EntityType“EFcodeFirst2.ModelEF.ProductCategory”未声明名为“CategoryName”的导航属性。
需要修复的不是EF查询,这是datagridview列绑定。@PeterBons我不这么认为,因为我在控制台应用程序中尝试了它,得到了相同的结果“System.Data.Entity.DynamicProxies.ProductCategory”,但确实如此!因为它是一个复杂类型,所以它将显示类别的字符串表示形式。您应该设置列的正确字段名,如CategoryName。将category列绑定到类似
Eval(“category.CategoryName”)
@PeterBons@Robert McKee我尝试过:
var pppp=db.products.Include(p=>p.category.CategoryName).ToList()
但有一个例外,
EntityType“EFcodeFirst2.ModelEF.ProductCategory”未声明名为“CategoryName”的导航属性。
需要修复的不是EF查询,这是datagridview列绑定。@PeterBons我不这么认为,因为我在控制台应用程序中尝试了它,得到了相同的结果“System.Data.Entity.DynamicProxies.ProductCategory”