2013-10-26 37 views
24

失蹤我試圖訪問DbSet<EntityClass>.Load()函數加載的實體。該功能在EF 6.0中不再存在;經過一定的調查,我發現它是EF擴展庫中定義的擴展方法的一部分。DbSet <entity> .Load()函數在EF 6.0

我得到EF 6.0擴展庫中的引用的NuGet軟件包,但好像它不再支持。我試圖通過調用.ToList()做功能的替代,但在處理該方法返回我的內部異常:

({"The column name is not valid. [ Node name (if any) = Extent1,Column name = HasErrors ]"})

我仔細檢查了映射類對數據庫表,但它看起來不錯。不知道我錯過了什麼。下面是我的映射類的代碼:

internal class CustomerMapping : EntityTypeConfiguration<Customer> 
{ 
    public CustomerMapping() 
    { 
     this.HasKey(t => t.Id); 

     this.Property(t => t.Id).HasColumnName("CUSTOMER_ID"); 
     this.Property(t => t.Name).HasMaxLength(30).HasColumnName("NAME"); 
     this.Property(t => t.Email).HasMaxLength(30).HasColumnName("EMAIL"); 
     this.Property(t => t.PhoneNo).HasMaxLength(100).HasColumnName("PHONE_NO"); 
     this.Property(t => t.MobileNo).HasMaxLength(100).HasColumnName("MOBILE_NO"); 
     this.Property(t => t.Address1).HasMaxLength(100).HasColumnName("ADDRESS1"); 
     this.Property(t => t.Address2).HasMaxLength(100).HasColumnName("ADDRESS2"); 
     this.Property(t => t.CustomerType).HasMaxLength(100).HasColumnName("CUSTOMER_TYPE"); 
     this.Property(t => t.Notes).HasMaxLength(100).HasColumnName("NOTES"); 

     this.ToTable("CUSTOMERS"); 
    } 
} 

下面是對數據庫所做的實際調用:

internal class EntityService : IEntityService 
{ 
    private ObservableCollection<Customer> customers; 


    public DBContextManager DataBaseContext { get; set; } 

    public ObservableCollection<Customer> Customers 
    { 
     get 
     { 
      if (customers == null && DataBaseContext != null) 
      { 
       // DataBaseContext.Set<Customer>().Load() 
       DataBaseContext.Set<Customer>().ToList(); 
       customers = DataBaseContext.Set<Customer>().Local; 

      } 
      return customers; 
     } 
    } 
} 

也請任何一個可以指出ToList()Load()之間的區別?

+8

根據MSDN,['Load'](http://msdn.microsoft.com/en-us/library/system.data.entity.dbextensions .load%28v = vs103%29.aspx)「相當於在不實際創建列表的情況下調用」ToList「,它是'IQueryable'上的擴展,位於'System.Data.Entity'命名空間中,所以確保你爲此添加了'使用'。 – UIlrvnd

+0

是的,我正在使用該命名空間。但我怎樣才能調試哪些列名未被發現被投訴? –

+0

哦,'ToList()'不填充'Local'。 – UIlrvnd

回答

1

在EF6中,包含擴展方法的類已從DbQueryExtensions重命名爲QueryableExtensions,但.Load()方法仍爲there。如果您不直接調用此擴展方法,那麼重命名對您無關緊要。

5

此外,除了System.Data.Entity的,你必須添加System.Linq的命名空間以及System.Windows。

0

DbSet.ToList()將返回所有項目從給定的,並且將填充DbSet.Local財產。您可以調用ToList()或Load()。您不需要引用Local屬性,但可以手動創建ObservableCollection。

return new ObservbableCollection<Customer>(DataBaseContext.Set<Customer>().ToList()); 

ToList()和Local之間可能有區別。例如,如果這不是您第一次在客戶集上執行查詢,那麼如果數據在網絡上被刪除,Local可能包含無效的數據。

26

我發現我需要添加:

using System.Data.Entity;