我是实体框架中的新手。我在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'。
答案 0 :(得分:0)
从db.tipos1中的t选择t会给你一个IEnumerable。你需要改变它,以便它只返回你想要的那个