2011-11-08 3 views
0

우리는 현재 ASP.NET과 MVC에서 손으로 완전히 작성된 솔루션을 제공합니다.Entity Framework 사용자 지정 ORM

현재 DAL에는 많은 못생긴 해킹 및 해결 방법이 있으며 이러한 해킹을 확장하는 대신 ORM으로 마이그레이션해야하는 정장을 설득 할 수있었습니다.

팀에서 Entity Framework 경험을 통해 우리는 Entity Framework를 사용하기로 결정했으나 이에 대한 경험이있는 사람들을위한 마이그레이션 질문이 있습니다.

모든 것이 EF로 마이그레이션 될 때까지 Entity-By-Entity를 마이그레이션하는 경우 성능 문제가 발생합니까? 가능한 대부분의로드 블록 (BL의 대부분을 다시 작성해야한다는 것의 명백 함을 제외하고)은 직면 할 수 있습니까? 말 그대로 Entity-by-Entity (모델 작성 측면에서)를 수행해야합니까, 아니면 엔티티 모델을 작성하고 BL을 비트 단위로 변경하는 데 문제가 있을까요?

제목에 대한 문서를 찾을 수없는 것 같습니다. MSDN은 "Yay Entity Framework이 좋다"라고 말하며, 마이그레이션하는 것이 좋습니다. "

모든 조언을 주시면 감사하겠습니다.

PS :이 읽었다 : 우리가 대신 NHibernate에의 EF와 함께 이동하기로 결정했습니다 그러나 Migrating from 'native' OODBMS to ORM (Entity Framework/SQL Server)

을, 아주 유용하지 않았다.

답변

2

좋은 질문입니다. 잠재 고객의 답변이 있습니다. 그것은 'Yay Entity Framework가 훌륭하기 때문에 마이그레이션하는 것이 좋습니다'

이제 우리 팀은 큰 (매우 큰) HR SaaS 솔루션으로 작업하고 있습니다.

  • EF 4.1
  • MySQL의
  • .NET MVC 3
(즉, 클라이언트의 요구 사항이었다)

그리고 시간이 경과 (3 주 가까이에) 우리가주의 : 처음부터 우리가 사용하기로 결정 next EF : Model을 먼저 사용하는 것은 미래에는 DB 시스템을 조금 변경하거나 테이블 간의 새로운 관계를 필요로 할 때 시스템을 지원하기 힘든 경우 시스템에서 유용하지 않고 유용합니다.

이 경우에는 모든 DB 요청에 대해 하나의 일반 저장소가있는 EF 코드 우선으로 이동했습니다. 이는 새로운 기술이므로 큰 솔루션에 대한 모범 사례 또는 사용 사례가 없었기 때문에 위험했습니다. 결과적으로 우리는 다른 두통을 많이 겪었습니다.

    ORM은 db ​​요청을 많이 만들었습니다 (테이블 간의 관계가 많음). 수정 됨. 포함()
  • POCO 개체의 동적 프록시 - 많은 문제가 발생하여 db의 첫 번째 엔터티가 요청 된 엔터티 형식 (예 : 동적 프록시 형식)과 일치하지 않습니다. 그래서 직렬화를 시도하고 직렬화에 대한 Memcached를 넣을 때이 엔티티가 현재 상황에서 더 이상 사용할 수 없다는 오류가 발생합니다. 이런 식으로 수정했습니다 : http://msdn.microsoft.com/en-us/library/dd456853.aspx 및이 : http://blogs.dotnetkicks.com/dpeterson/2011/08/11/theres-a-proxy-in-my-boots-entity-framework-poco/
  • 많은 믿을 수없는 요청을 보낸 멤버쉽이있는 바보 같은 가방.회원 자격으로 우리의 작업을 검토하여 수정 됨

또한 성능을 비교하기 위해 NHibernate를 시도했습니다.

  • 당신이 3 부분 캐싱이 해결 방법에 대한 준비가 무관 할 경우 NHiberanate는 EF에 대해 알아야 할 같은 :

    일반 정보가 있습니다. NHibernate에이

  • 의 기본 통합 EF와 NH 성능 사이에 큰 가지가 없다, 그러나 NH 내가 당신의 퀘스트와 정보 대답

희망이 당신을 위해 관련 매핑 손 일이 많다.

ps> 내 영어는 죄송합니다.

+0

+1; 나는이 모든 이슈들을 보았고, 당신이 그들을 지적하고 있다는 점이 좋습니다. 우리의 경우 Telerik UI 컨트롤에 엔티티를 직렬화하려고했습니다. JonSerializer는 Entity serialization을 처리 할 수 ​​없습니다 (객체주기가 감지 될 때 직렬화를 자르는 이상한 래퍼를 사용하여 해결했습니다). –

+0

NHibernate에 유창한 구문 코드 기반 매핑 지원을 제공하는 애드온이 있습니다 : http://fluentnhibernate.org/. 비록 당신이 말했듯이, 기본적으로 EF와 동등한 수준에 이르렀지만 퍼프 (perf) 차이가 없기 때문입니다. –

+0

BTW,'ORM은 많은 DB 요청을했습니다. (테이블 간의 많은 관계의 원인). .Include()에 의해 수정 됨. 코드 우선으로 인해 발생했다고 생각하지 않습니다. 나는 모델과 함께이 문제를 처음 보았다. 그러나 모델 우선 지원이 실제로 아직 원활하지 않다는 귀하의 진술에 동의합니다. 그것은 다음 VS 릴리즈 (Denali)에있을 예정이나 아직 없습니다. –

관련 문제