使用Entity框架和抽象类强制转换异常

时间:2014-01-23 21:26:32

标签: entity-framework casting abstract-class derived

我是实体框架中的新手。我在VS2013上使用EF6。

我需要从“代码优先”方法实现数据库。 问题是我使用的是抽象类,我无法理解为什么下一代代码不起作用:

public abstract class AClaseT1
{
    //private int idT1;
    [Key]
    public int idT1
    { get; set; }

}

public class ClaseT1Dev1:AClaseT1
{
    //private int dataT1;
    public int dataT1
    { get; set; }
}

public class Contexto : DbContext
{
    public DbSet<AClaseT1> tipos1 { get; set; }        
}

class Program
{
    static void Main(string[] args)
    {

        Database.SetInitializer(new MigrateDatabaseToLatestVersion<Contexto, Configuration>());

        using(var db = new Contexto())
        {
            Console.WriteLine("Int for Tipo1:");
            int d = Console.Read();

            ClaseT1Dev1 t1 = new ClaseT1Dev1() { dataT1 = d };
            db.tipos1.Add(t1);
            db.SaveChanges();

            ClaseT1Dev1 query = (ClaseT1Dev1)from t in db.tipos1
                                            select t;

            Console.WriteLine("Int obtenido de Tipo1 metido en BDD: {0}", query.idT1);
            Console.Read();

        }


    }

当我运行应用程序时,它会在“查询”行中断,因为它无法进行转换...有没有办法让它工作? 我需要一个表来自基础抽象类的不同派生对象(我认为这是一种TPC继承方法)。

感谢您的帮助!!!

修改

“查询”行引发的确切异常是:

InvalidCastException未处理

PruebaCodeFirstDB.exe中发生未处理的“System.InvalidCastException”类型异常

附加信息:无法将'System.Data.Entity.Infrastructure.DbQuery`1 [PruebaCodeFirstDB.AClaseT1]'类型的对象转换为'PruebaCodeFirstDB.ClaseT1Dev1'。

1 个答案:

答案 0 :(得分:0)

从db.tipos1中的t选择t会给你一个IEnumerable。你需要改变它,以便它只返回你想要的那个