我很难理解为什么会收到 InvalidCastException 这是我收到的错误消息:
无法将类型为“System.Data.Entity.DynamicProxies.Man_58184D79075BC811252680D7866D3D69D0C46FD038D3B123A5E3B102E1FC77A2”的对象转换为类型“System.Data.Entity.DbSet`1[ConsoleApplication1.Man]”。
- Man是传递给 TEntity 的实体类的名称
- 我已经用代码中的注释标记了错误的位置。
此存储库类的目的是保存给定的 DbContext 和 DbSet,并调用其方法来删除记录和/或显示给定 DbSet 的所有记录。
public class Repository<TEntity> where TEntity : class
{
private DbContext dbContext;
private DbSet<TEntity> dbSet { get; set; }
public Repository(DbContext dbContext)
{
this.dbContext = dbContext;
this.dbSet = this.dbContext.Set<TEntity>();
}
public void Delete(int id)
{
TEntity entity = dbSet.Find(id);
dbSet.Remove(entity);
dbContext.SaveChanges();
}
public void DisplayAll()
{
IQueryable Query = from item in dbContext.Set<TEntity>()
where true
select item;
foreach (DbSet<TEntity> x in Query) //InvalidCastException
{
// print entity fields to console here.
}
}
}
这些是我用于创建存储库对象的主程序中的行:
TestDataBaseEntities是我用来引用我的实体模型的 DbContext 对象的类型。
class Program
{
static void Main(string[] args)
{
int myID;
var dbEntities = new TestDatabaseEntities();
Repository<Man> ManTracker = new Repository<Man>(dbEntities);
ManTracker.Display(); // exception thown in this method.
Console.WriteLine("Choose ID to delete from Men list");
myID = int.Parse(Console.ReadLine());
ManTracker.Delete(myID);
ManTracker.Display();
Console.ReadLine();
}
}