2013-10-26 17 views
24

エンティティを読み込むためにDbSet<EntityClass>.Load()関数にアクセスしようとしています。この関数はEF 6.0では存在しません。特定の調査の結果、EF拡張ライブラリで定義されている拡張メソッドの一部であることがわかりました。DbSet <entity> EF 6.0で.Load()関数がありません

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 = 10.3%29.aspx) "は、実際にリストを作成せずに' ToList'を呼び出すのと同じです。これは 'IQueryable'の拡張であり、' System.Data.Entity'名前空間にあります。そのために 'using'を追加してください。 – UIlrvnd

+0

はい私はその名前空間を使用しています。しかし、どのように私は不平を言われて見つからない列名をデバッグすることができますか? –

+0

ああ、ToList()は 'Local'を埋めるものではありません。 – UIlrvnd

答えて

1

EF6では、拡張メソッドを含むクラスの名前がDbQueryExtensionsからQueryableExtensionsに変更されましたが、.Load()メソッドはまだthereです。この拡張メソッドを直接呼び出さない場合は、名前の変更はあなたにとって重要ではありません。

5

また、System.Data.Entityのほかに、System.Windowsと同様にSystem.Linq名前空間を追加する必要があります。

0

DbSet.ToList()は、指定されたセットからすべてのアイテムを返し、DbSet.Localプロパティを設定します。 ToList()またはLoad()のどちらかを呼び出すことができます。ローカルプロパティを参照する必要はありませんが、手動でObservableCollectionを作成することができます。

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

ToList()とLocalの間に違いがある可能性があります。たとえば、顧客セットで初めてクエリを実行するのではなく、データがネットワーク上で削除された場合、Localには無効なデータが含まれる可能性があります。

26

私は追加する必要が見つかりました:

using System.Data.Entity; 
関連する問題