Подтвердить что ты не робот

Функция DbSet <entity>.Load() отсутствует в EF 6.0

Я пытаюсь получить доступ к функции DbSet<EntityClass>.Load() для загрузки объектов. Эта функция больше не существует в EF 6.0; при определенном исследовании я обнаружил, что он является частью методов расширения, определенных в библиотеке расширений EF.

Я получаю ссылочные пакеты NuGet для расширенной библиотеки EF 6.0, но кажется, что он больше не поддерживается. Я попытался сделать альтернативу этой функции, вызвав .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()?

4b9b3361

Ответ 1

Я нашел, что мне нужно было добавить:

using System.Data.Entity;

Ответ 2

Кроме того, помимо System.Data.Entity, вы должны добавить пространство имен System.Linq, а также System.Windows.

Ответ 3

В EF6 класс, содержащий методы расширения, был переименован из DbQueryExtensions в QueryableExtensions, но метод .Load() по-прежнему там. Если вы не вызываете этот метод расширения напрямую, переименование не имеет значения для вас.

Ответ 4

DbSet.ToList() вернет все элементы из заданного набора и заполнит свойство DbSet.Local. Вы можете вызвать либо ToList(), либо Load(). Вам не нужно ссылаться на локальное свойство, но вы можете создать вручную ObservableCollection.

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

Может существовать разница между ToList() и Local. Если, например, это не первый раз, когда вы выполняете запрос в наборе клиентов, Local может содержать недопустимые данные, если данные были удалены в сети.