Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.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# 在实体框架中处理数据库对象的基本/完全检索_C#_Entity Framework - Fatal编程技术网

C# 在实体框架中处理数据库对象的基本/完全检索

C# 在实体框架中处理数据库对象的基本/完全检索,c#,entity-framework,C#,Entity Framework,我在数据库中有一个customer表,其中存储了姓名、地址等,以及一些照片、徽标和其他图像 我正在使用entity framework,我想知道如何处理这样一种情况:在某些情况下,我只想带回有关客户的基本数据,而不是包括图像在内的完整数据 我应该有两个实体,CustomerBasic和CustomerComplete吗 或 拥有一个客户实体,并使用两个单独的方法填充它:FillBasic和FillComplete 有什么最佳实践吗?我是EF的新手。这实际上取决于您的存储库结构(如果有的话)-对于

我在数据库中有一个customer表,其中存储了姓名、地址等,以及一些照片、徽标和其他图像

我正在使用
entity framework
,我想知道如何处理这样一种情况:在某些情况下,我只想带回有关客户的基本数据,而不是包括图像在内的完整数据

我应该有两个实体,CustomerBasic和CustomerComplete吗

拥有一个客户实体,并使用两个单独的方法填充它:FillBasic和FillComplete


有什么最佳实践吗?我是EF的新手。

这实际上取决于您的存储库结构(如果有的话)-对于EF本身,您可以使用一个带有您想要的属性的投影来创建一个表示“基本客户”的业务对象实例,即


当实体中有集合属性(即示例中的图像)时,性能变得更加重要。在您的情况下,您可以利用延迟加载,仅在需要时具体化这些属性。

这实际上取决于您的存储库结构(如果有的话)-对于EF本身,您可以使用一个投影,将您想要的属性映射到一个代表“基本客户”的业务对象实例,即


当实体中有集合属性(即示例中的图像)时,性能变得更加重要。在您的情况下,您可以利用延迟加载,仅在需要时具体化这些属性。

我认为可以通过使用select子句投影查询来实现您想要的。例如()


使用此模式可以做很多事情。

我认为可以通过使用select子句投影查询来完成所需的工作。例如()


你可以用这种模式做很多事情。

匿名类型在很多情况下都很好,但是我应该提到的是,如果不创建一个实际的类来保存它们,你就不能返回这个投影的结果或将它们传递给另一个方法。是的,我需要将它们返回到其他方法,因此创建一个名为CustomerBasic的类可能更好。匿名类型在许多情况下都很好,但我应该指出,如果不创建一个实际的类来保存它们,则无法返回此投影的结果或将其传递到另一个方法。是的,我需要将它们返回到其他方法,因此创建一个名为CustomerBasic的类可能更好。它实际上不是图像的集合,而是单独命名的列。如果我没有要求c.LogoFileName(按照您的代码示例),它将不会从数据库中返回?@AlexJ:没错-如果您使用这样的投影,它将映射到
select FirstName,LastName from…
我可以只使用客户实体(具有图像字段)而使用投影不加载它们吗。所以它将是c=>newcustomer(),但我不加载图像,只加载名称和地址。它会以同样的方式工作吗?我试图避免同一个对象有两个实体,基本的和完整的。@AlexJ:不,很遗憾,你不能用ef将其投影到一个实体中。你能给我发一个链接,让我阅读这个投影材料吗?它不是一个真正的图像集合,而是单独命名的列。如果我没有要求c.LogoFileName(按照您的代码示例),它将不会从数据库中返回?@AlexJ:没错-如果您使用这样的投影,它将映射到
select FirstName,LastName from…
我可以只使用客户实体(具有图像字段)而使用投影不加载它们吗。所以它将是c=>newcustomer(),但我不加载图像,只加载名称和地址。它会以同样的方式工作吗?我试图避免同一个对象有两个实体,基本和完整。@AlexJ:不,很遗憾,你不能用EF将其投影到一个实体中。你能给我发送一个链接,让我可以阅读这个投影的内容吗?
var customerBasicList = context.Customers
                               .Where(...)
                               .Select( c => new CustomerBasic() 
                               {
                                 FirstName = c.FirstName,
                                 LastName = c.LastName,
                               }).ToList();
using(AdventureWorksDB aw = new 
AdventureWorksDB(Settings.Default.AdventureWorks)) {
    var newSalesPeople = from p in aw.SalesPeople
                         where p.HireDate > hireDate
                         orderby p.HireDate, p.FirstName
                         select new { Name = p.FirstName + " " + p.LastName,
                                      HireDate = p.HireDate };

    foreach(SalesPerson p in newSalesPeople) {
        Console.WriteLine("{0}\t{1}", p.FirstName, p.LastName);
    }
}