2012-11-26 2 views
1

우리는 mvc 프로젝트에서 잠시 동안 LINQ2SQL을 사용 해왔다.LINQ2SQL SQL에 대한 지원되는 변환이 Entity Framework에 있습니까?

우리가 끊임없이 직면하는 문제 중 하나는 다음과 같은 것을 사용하여 쿼리를 시도 할 때 "SQL에서 지원되는 번역 없음"입니다.

LINQ2SQL 부분 클래스

public class User 
{ 
    public bool IsActive 
     { 
      get 
      { 
       return (StartDate < DateTime.Now || StartDate == null) && (EndDate > DateTime.Now || EndDate == null); 
      } 
     } 

    public DateTime? StartDate{get;set;} 
    public DateTime? EndDate{get;set;} 
} 

쿼리는 'User.IsActive'당신이

멤버

을 얻을

Datacontext.Users.Where(u => u.IsActive) 

같은 것입니다 SQL에 지원되는 변환이 없습니다.

우리는 첫번째 EF 코드로 이동을 고려하고 나는이 같은 문제가 있는지 궁금 하군요, 어떻게 EF 다르게 작동하지 않을 경우 그것을 해결하기 위해?

답변

2

사용자 DTO 클래스 (Linq2sql 엔터티의 일부가 아닌 클래스)를 사용하는 경우 해당 클래스에 프로젝트를 적용하는 데 문제가 없어야합니다.

public class UserDTO 
{ 
    public bool IsActive{get;set;} 
    public DateTime? StartDate{get;set;} 
    public DateTime? EndDate{get;set;} 
} 

public IList<UserDTO> GetActiveUsers() 
{ 
    using(var db = new DbContext()) 
    { 
     var users = GetUsers(db); 
     return users.Where(u => u.IsActive).ToList(); 
    } 
} 

private IQuerable<UserDTO> GetUsers(DbContext db) 
{ 
    return (from u in db.Users 
      select new UserDTO() 
      { 
       StartDate = u.StartDate, 
       EndDate = u.EndDate, 
       IsActive = (u.StartDate < DateTime.Now || u.StartDate == null) && (u.EndDate > DateTime.Now || u.EndDate == null) 
      }); 
} 
+0

이것이 문제를 해결하는 동안 나는 EF에서 이런 일이 발생하면 더 관심이 있습니다. –

관련 문제