29

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

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()

4

4 に答える 4

31

追加する必要があることがわかりました:

using System.Data.Entity;
于 2015-03-03T08:55:04.410 に答える
5

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

于 2013-12-10T18:10:33.830 に答える
1

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

于 2013-10-28T18:54:52.113 に答える
0

DbSet.ToList() は、指定されたセットからすべての項目を返し、DbSet.Local プロパティに値を入力します。ToList() または Load() を呼び出すことができます。ただし、Local プロパティを参照する必要はありません。ObservableCollection を手動で作成できます。

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

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

于 2013-12-17T21:09:07.940 に答える