2016-11-25 1 views
0

엔티티 프레임 워크 (필자는 6.0을 사용하고 있지만 업데이트가 필요할 경우)의 새로운 기능인 엔티티를 linq 쿼리에 바인딩하는 방법을 찾고 있습니다. 예를 들어 내가 가진 : 둘은 데이터베이스의 테이블에 매핑되는엔티티 프레임 워크에서 linq 쿼리

public class User 
{ 
    public string Name {get;set;} 
    public WorkPlace Place {get;set;} 
    public bool IsAlive{get;set;} 
} 

public class WorkPlace 
{ 
    public string Name {get;set;} 
    public bool IsActive {get;set;} 
    public Collection<User> Users; 
} 

을하고 내가 가지고있는 OnModelCreating :

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<User>().ToTable(tableName: "users"); 
    modelBuilder.Entity<WorkPlace>().ToTable(tableName: "workplaces"); 
} 

하지만 (탐색 및 지연로드와) 다른 개체를 사용해야합니다 : 내가 사용자의 회사를 얻을 때

public class CustomUser 
{ 
    public string Name {get;set;} 
    public CustomWorkPlace Place {get;set;} 
} 

public class CustomWorkPlace 
{ 
    public string Name {get;set;} 
    public Collection<CustomUser> Users; 
} 

someBuilder.Entity<CustomUser>().ToLinq(cntx => cntx.Set<User>().Where(user => user.IsAlive)).MapProperties(); 
// the way of mapping properties is not important 
someBuilder.Entity<CustomWorkPlace>().ToLinq(cntx => cntx.Set<WorkPlace>().Where(place => plase.IsActive)).MapProperties() 

그리고 가장 흥미로운 것은 탐색을 통해 가고, 나는 활성화되지 않은 회사 및 COM에 대해 동일한을 얻을합니다 pany - 살아 있지 않은 User에 매핑 된 CustomUser을 가져 오지 않아야합니다.

감사 등

+1

무엇이 문제입니까? – Kinetic

+0

엔티티 프레임 워크 또는 너겟 확장을 통해이 논리 (컨텍스트에서 내 사용자 정의 객체 가져 오기)를 어떻게 구현할 수 있습니까? – VVildVVolf

+1

일반 엔티티를 사용하여 데이터를로드하고 거기에서 사용자 정의 데이터를 생성하십시오. – Kinetic

답변

0

당신은 적절한 게터이 할 수있는 많은 :이 같은 탐색 속성을 매핑해야

public class User 
{ 
    public string Name {get;set;} 
    public WorkPlace Place get{ return this.WorkPlace.Where(x => x.IsActive).FirstOrDefault();} 
    public bool IsAlive{get;set;} 
} 
+0

LevelUp 개발자가 사용하지 않는 속성 (예 : IsAlive)을이 필드에 대해 알 필요가 없으며 FirstOrDefault 메서드가이 쿼리를 구체화하지만 개발자가 일부 선택을 평소와 같이 작성할 필요가 있습니다. 삽입 및 업데이트를 지원할 필요가 없음). – VVildVVolf

0

: 다음

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<User>().ToTable(tableName: "users"); 
    modelBuilder.Entity<WorkPlace>().ToTable(tableName: "workplaces"); 
    modelBuilder.Entity<User>() 
     .HasRequired(user => user.Place) 
     .WithMany(place => place.Users); 
} 

을 수행 할 수 있습니다 탐색 속성을 사용하여 쿼리를 수행하십시오.

public List<CustomUser> GetActiveCustomuser() 
{ 
    return context.Users 
     .Where(u => u.Active) 
     .Select(new CustomUser() 
      { 
       Name = u.Name, 
       Place = new CustomPlace() { Name = u.Place.Name } 
      }) 
     .ToList(); 
} 
+0

죄송합니다, 아마도 내 질문에 명확하지 않다,하지만 쿼리 할 수있는 컬렉션 (일부 선택을 위해 필요) 및 탐색 게으른해야합니다. – VVildVVolf

관련 문제