2014-01-23 43 views
0

我是新的實體框架。我在VS2013上使用EF6。用實體框架和抽象類鑄造異常

我需要從「代碼優先」的方法實施數據庫。 問題是,i'm使用一個抽象類,我不能明白爲什麼代碼的下一PICE doesn't工作:

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.Data.Entity.Infrastructure.DbQuery`1類型的對象[PruebaCodeFirstDB.AClaseT1 ]'鍵入'PruebaCodeFirstDB.ClaseT1Dev1'。

+0

你可以擴大「它打破」?什麼是例外?例如「不能投等.. – Colin

+0

我剛剛編輯我的帖子與我收到的確切例外。 謝謝。 – MorgoZ

+0

您是否試圖獲得您剛剛插入的實體的ID?因爲ID生成在數據庫? –

回答

0

from db.tipos1 select t會給你一個IEnumerable。你需要改變它,以便它只是返回你想要的那個