2012-03-19 6 views
1

비즈니스 로직을 구현하는 많은 클래스 집합이 있습니다. 대부분의 SQL Server에서 값을 읽는 평범한 오래된 ADO.net .Load 메서드가 나는 수년 동안 손으로 작성했습니다. 이것은 모두 Linq2Sql과 EF보다 먼저 선다.기존 클래스와 기존 테이블이있는 Entity Framework 4.1

이제 Entity Framework를 사용하도록 클래스 라이브러리를 업데이트하고 싶지만 최대한 힘들이지 않고 작업하고 싶습니다. EF는 클래스의 속성 이름에서 열과 키 이름을 유추 할 수 있지만 클래스에는 열 이름과 일치하지 않는 속성이 많이 있고 데이터베이스의 열 이름과 일치하지 않는 속성이 있습니다. 나는 그 속성들 각각을 잊지 않고 (그리고 앞으로의 모든 속성을 항상 .Ignore()하는 것을 명심해야한다.) 그리고 .HasColumnName()에서 모든 차이점을 원한다.

기존 테이블 및 기존 클래스와 함께 EF를 사용하는 가장 쉬운 방법은 무엇입니까? 그래서 최소한의 매핑을 수행하고 DbContext를 사용하여 엔티티와 SaveChanges() 및 기타 EF가 지원하는 강력한 유형의 모든 것들을 찾을 수 있습니다. 모든 비즈니스 수업을 손으로 거치고 포함 할 속성에 주석을 달지 않고도?

예를 들어 db.Customers.Find (123)를 사용하여 Customer 인스턴스를 만들고 CustomerID = 123 인 고객으로부터 *를 선택하고 DO가있는 열을 가능한 한 최상으로 존재하고 고객 인스턴스를 사용할 준비가되어있는 속성을 만든 다음 필요에 따라 차이점을 주석을 달 수 있습니다. 이것이 가능한가요? 아니면 너무 많은 EF를 요구합니까?

기존의 모든 비즈니스 클래스를 활용할 수 있도록 속성 매핑에 최선의 노력을 할 수있는 똑똑한 DbContext가 있습니까? 다른 ORM을 고려해야할까요?

+0

기타 ORM은 도움이되지 않습니다. 데이터베이스와 클래스가 둘 다 있다면 항상 모든 클래스에 대해 올바른 매핑을 만들기위한 노력을 기울여야합니다. –

답변

0

EF4 "코드 우선"을 사용하면 기본 데이터베이스 지속성 매핑 규칙을 선택적으로 무시하고 클래스를 데이터베이스에 매핑하는 대체 방법을 구성 할 수 있습니다.

사용 설정 방법에는 몇 가지가 있습니다.

var unicorn = context.Unicorns.Find(3); 
+0

나는 이것을 시도했지만 데이터베이스의 칼럼에 해당하지 않는 모든 클래스의 모든 속성에 대해 불만을 제기해야 할 필요가있다. – powlette

+0

예. 매핑은 EF가 사용할 속성/열을 이해할 수있는 어딘가에 지정해야합니다. 이 방법을 지정하는 가장 명확한 방법은 속성을 사용하여 poco 클래스를 오염시키는 것이 아니라 별도의 매핑 파일에 있다고 생각합니다. – Marcus

1

이 시도 : 당신은 여전히 ​​찾기를 사용하여 기본 키하여 엔티티를 검색 할 수 있습니다

public class YourContext : DbContext 
{ 
    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     // Mapping 
    } 
} 

: 가장 쉬운 방법 중 하나는 DbContext 기본 클래스에 정의 된 "OnModelCreating"메소드를 오버라이드 (override)하는 것입니다 : 데이터베이스에서 데이터 모델 (.edmx)을 만듭니다. 모델을 편집하고 데이터베이스에 추가하려는 클래스의 프로퍼티 및 프로 시저를 추가하십시오. 마지막으로 모델 (.Edmx)에서 데이터베이스를 업데이트하십시오. 변경된 테이블과 프로 시저 만 선택하면됩니다. 자습서를 볼 수 있습니다. http://msdn.microsoft.com/en-us/data/gg685494 http://msdn.microsoft.com/en-us/data/gg685489

+0

http://www.hanselman.com/blog/EntityFrameworkCodeFirstMigrationsAlphaNuGetPackageOfTheWeek10.aspx – user1235486

관련 문제