【发布时间】:2013-11-05 12:09:46
【问题描述】:
我正在尝试访问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()的区别?
【问题讨论】:
-
根据MSDN,
Load“相当于在没有实际创建列表的情况下调用ToList”,它是IQueryable的扩展,位于System.Data.Entity命名空间中,所以请确保您为此添加using。 -
是的,我正在使用该命名空间。但是如何调试未发现被投诉的列名?
-
哦,
ToList()不填Local。 -
这就是为什么我必须先加载:(
标签: c# .net wpf entity-framework-6