来自entity.dynamicproxies.myentityclass到Entity.dbset`1 [myenti



我很难理解为什么我会得到无效的castection这是我收到的错误消息:

无法施放类型的对象'system.data.entity.dynamicproxies.man_58184d79075bc811252680d7866d7866d3d69d0c46fd038d3b1238d3b1238b123a5e3b11f102b102e1fc77a2eman topeman to type.nity.enty.enty.enty.enty.entr.ta.ta.ents'''''/p>

  • MAN 是传递给宗教的实体类的名称
  • 我已经在代码中标记了错误的位置。

此存储库类的目的是保存给定的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();
    }
}

我想我找到了答案。我在每个语句中都使用错误的类型。

而不是做dbset,我应该使用暂定。

但这是一种误导性的,因为即使我能够与暂定打字,我也需要拥有打印暂定对象字段的代码,而宗教则无法访问我需要打印的字段。我认为我不使用单独的存储库类,而是应该使用一个定义称为显示函数的接口,并通过以某种方式通过从数据库创建模型来以某种方式通过以某种方式实现每个实体类。也许通过创建从实体类继承的类,然后实现接口。我想这样做是因为要保持面向对象的方向,这对我来说似乎是有意义的,一个对象不应该依靠另一个对象向用户显示其内容,它应该显示它们本身。

最新更新