DbSet.EF 6.0 中缺少 Load() 函数

本文关键字:Load 函数 entity EF DbSet | 更新日期: 2023-09-27 18:37:05

我正在尝试访问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()之间的区别吗?

DbSet<entity>.EF 6.0 中缺少 Load() 函数

我发现我需要添加:

using System.Data.Entity;

此外,除了 System.Data.Entity,您还必须添加 System.Linq 命名空间以及 System.Windows。

在 EF6 中,包含扩展方法的类已从 DbQueryExtensions 重命名为 QueryableExtensions,但.Load()方法仍然存在。如果不直接调用此扩展方法,则重命名对您来说无关紧要。

DbSet.ToList() 将返回给定集合中的所有项,并将填充 DbSet.Local 属性。你可以调用 ToList() 或 Load()。不过,您不需要引用本地属性,您可以手动创建 ObservableCollection。

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

ToList() 和 Local 之间可能存在差异。例如,如果这不是您第一次对客户集执行查询,则 Local 可能包含无效的数据(如果数据已在网络上删除)。