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

我试图访问DbSet.Load()函数来加载实体。 EF 6.0中不再存在此function; 经过一定的调查,我发现它是EF扩展库中定义的扩展方法的一部分。

我获得了EF 6.0扩展库的参考NuGet包,但似乎不再支持它。 我尝试通过调用.ToList()来替代该函数,但是这个方法在处理时返回一个内部exception:

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

我仔细检查了数据库表的映射类,但它看起来很好。 不知道我错过了什么。 下面是我的映射类的代码:

 internal class CustomerMapping : EntityTypeConfiguration { 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 customers; public DBContextManager DataBaseContext { get; set; } public ObservableCollection Customers { get { if (customers == null && DataBaseContext != null) { // DataBaseContext.Set().Load() DataBaseContext.Set().ToList(); customers = DataBaseContext.Set().Local; } return customers; } } } 

也请任何人指出ToList()Load()之间的区别?

我发现我需要添加:

 using System.Data.Entity; 

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

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

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

 return new ObservbableCollection(DataBaseContext.Set().ToList()); 

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