2013-05-28 2 views
0
public class baseEntity 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 


public class ProjectEntity : baseEntity 
{ 
    public string Address { get; set; } 
    public string PhoneNo { get; set; } 
} 


public class ProcessEntity : baseEntity 
{ 
    public string TypeName { get; set; } 
    public int Steps { get; set; } 
} 

public class DBContext : DbContext 
{ 
    public DBContext() : base("DefaultConnection") 
    { 

    } 
    public DbSet<baseEntity> BaseEntities { get; set; } 

} 

DBContext db = new DBContext(); 
var list = from p in db.BaseEntities select p 

이 필드는 BaseEntity, ProcessEntity 또는 ProjectEntity 인 모든 항목을 기초로 사용합니다.ef는 기본 클래스에서만 필드를 가져옵니다.

필드를 BaseEntity (ID, Name 만)로 가져 오려면 어떻게해야합니까?

var list = from p in db.BaseEntities select new {p.ID,p.Name} 

이것은 내가 원하는 것이 아닙니다. 내 프로젝트에 많은 필드가 있기 때문에. 나는이

var list = from p in db.BaseEntities select new {p.ID,p.Name,p.xxx .....................} 

답변

0

시도처럼 코드를 작성하고 싶지 않아요 :

var list = from p in db.BaseEntities.OfType<baseEntity>() select p 

을하지만, 마음에서 생성되는 실제 Sql 쿼리를 유지하면 Inheritance Strategy (TPT/TPH/TPC)에 따라 달라집니다 .

+0

of type은이 직업을 끝낼 수 있습니다. 감사합니다. – iwaitu

0

of type이 직장을 마칠 수 있습니다. 감사합니다. 그러나 더 많은 필드와 더 많은 상속 클래스가이 프로젝트에 추가됩니다.

var list = from p in db.BaseEntities.OfType<baseEntity>() select p 

매우 복잡한 sql을 생성합니다. 나는 SQL Server Management Studio에 SQL을 복사하고 복사하기 위해 list.toString()을 사용한다. 내용은 8000 개가 넘는다. 어떻게 성능을 향상시킬 수 있습니까?

+0

'ToString()'은 당신에게 SQL을주지 않을 것입니다 : http://www.hibernatingrhinos.com/products/EFProf – haim770

관련 문제