2014-01-23 4 views
0

저는 엔터티 프레임 워크에서 새로운 기능을 제공합니다. VS2013과 함께 EF6을 사용하고 있습니다.Entity 프레임 워크 및 추상 클래스로 캐스팅 예외가 발생했습니다.

"코드 우선"접근 방식으로 데이터베이스를 구현해야합니다. 내가 응용 프로그램을 실행하면

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이이 처리되지 않은 'System.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을 제공합니다. 당신이 원하는 것을 돌려 줄 수 있도록 그것을 바꿔야합니다.