最有效的填充复合类的方法

本文关键字:方法 复合 填充 有效 | 更新日期: 2023-09-27 17:51:07

我只是想获得一些关于使用EF4.0填充我的复合类的最有效和最快的方法的意见。我有一个父类,它的结构与下面的类类似。它反映了我的数据库结构。

public class Person
{
   public string FirstName { get; set; }
   ........
   public Address WorkAddress { get; set; }
   public IList<Account> Workspace { get; set; }
}
public class Address
{
   public string FirstName { get; set; }
   ......
}
public class Account
{
   public string SortCode { get; set; }
   public IList<string> TransactionHistory {get; set;}
   ......
}    

因此,在这个时刻,我从EF中拉回所有的"person",并循环遍历每个person,并填充每个person的Address和Accounts。延迟加载是启用的,所以我必须在using语句中封装所有循环,否则当我尝试迭代它们时,我的帐户将为空。所以,我可以禁用延迟加载仅为这个调用或应该接近我的人员列表的人口以另一种方式。

using (var entities = new PersonEntities())
{
    var dbPeople = (from person in entities.Persons
                    select person).ToList();
    foreach(var person in dbPeople)
    {
        foreach(var account in person.Accounts)
        {
           // In here I populate my 'Person' business object account and add it to my collection to return.
        }  
    }
}

最有效的填充复合类的方法

如果我没看错的话,您应该包含保持LazyLoading启用的关系。您可以使用Include方法对查询执行此操作:

using (var entities = new PersonEntities())
{
    var dbPeople = entities.Persons.Include("Accounts").ToList();
    foreach(var person in dbPeople)
    {
        //Do nothing with Accounts if the relation is mapped correct
    }
}

编辑:你也可以在创建的PersonEntities实例的生命周期内禁用LazyLoading:

using (var entities = new PersonEntities())
{
        entities.Configuration.LazyLoadingEnabled = false;
        //...
}