我正在尝试访问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()
之间的区别吗?
答案 0 :(得分:28)
我发现我需要添加:
using System.Data.Entity;
答案 1 :(得分:5)
此外,除了System.Data.Entity之外,还必须添加System.Linq命名空间以及System.Windows。
答案 2 :(得分:1)
在EF6中,包含扩展方法的类已从DbQueryExtensions重命名为QueryableExtensions,但.Load()
方法仍为there。如果您没有直接调用此扩展方法,则重命名对您来说无关紧要。
答案 3 :(得分:0)
DbSet.ToList()将返回给定集合中的所有项目,并将填充DbSet.Local属性。您可以调用ToList()或Load()。您不需要引用Local属性,您可以手动创建ObservableCollection。
return new ObservbableCollection<Customer>(DataBaseContext.Set<Customer>().ToList());
ToList()和Local之间可能存在差异。例如,如果您不是第一次在客户集上执行查询,则本地可能包含无效的数据(如果数据已在网络上删除)。