2010-07-26 2 views
1

저는 L2E에서 3 개의 간단한 테이블로 작업하고 있었는데 그 목적은 매우 간단했습니다 : Users, Users_Roles, Roles.VS 2008의 엔티티 디자이너는 평범하지 않습니까?

사용자는 사용자 ID (uniqueidentifier) ​​열에서 참조되는 Users_Roles와 1 : 많은 관계를 가졌습니다. 당시 롤은 어떤 테이블과도 관계가 없었습니다. 디자이너가 3 개의 테이블을 모두 가져 와서 사용자가 Users_Roles에 매핑 한 것을 반영하고 역할은 모두 자체적으로 앉았습니다.

실현하는 역할은 많은 : 많은 관계에서 Users_Roles에 매핑되어야하며, 나는 경영 스튜디오로 뛰어 들었다. 나는 역할에서 Users_Roles로 관계를 때리고 그것을 저장했다. 그런 다음 VS로 다시 뛰어 들었고 내 논리에서 논리적 인 단계를 밟았습니다. "데이터베이스에서 모델 업데이트"를 마우스 오른쪽 버튼으로 클릭하여 엔터티 모델을 업데이트하려고했습니다. 업데이트 목록에 세 개의 테이블이 모두 표시되었습니다. 업데이트 후 시각적 인 관계는 변하지 않았습니다. 나는 어떤 변경 사항이 있는지 확인하기 위해 다시 컴파일하려고하지만 줄 번호에 서로 다른 두 가지 오류 접수 :

 
Error 3 Error 3034: Problem in Mapping Fragments starting at lines 177, 192: 
        Two entities with possibly different keys are mapped to the 
        same row. Ensure these two mapping fragments map both ends 
        of the AssociationSet to the corresponding columns. 

C:*\Model1.edmx 178 15 MVCTestApp 

아무 소용 오류를 디버깅하는 시도를. 결국 좌절감을 느끼고 모델을 삭제하고 다시 작성했습니다. 그 관계는 인정 받았고, 디자이너는 적절히 업데이트되었고, 인생은 좋았습니다.

나는 디자이너를 밖에 데리고 매장하기를 원했던 것은 처음이 아니다 : 일주일 정도 전에 나는 테이블을 삭제할 신경이 있었고, 테이블을 삭제하는 것이 매우 빨리 배웠다. 디자이너 만 디자이너에서 삭제합니다. 그 매핑은 유지됩니다.

그래서 몇 가지 질문 :

)이 동작은 VS 2008로 제한됩니까? 나는 내장 실제로 작동 디자이너,

3) 방법가 거기

2) 대체 할 수있다 다른 도구, 곧 2010있을 것이다, 예상대로 디자이너 기능을 기대하는거야 모델 업데이트를 실제로 업데이트합니다. 아마도 전체 모델을 삭제하는 것 외에는 인식하지 못하는 트릭 일 수도 있습니다. 수동으로 설정 한 다른 모든 관계를 잃어 버릴 수도 있습니다.

+0

이해할 수 있듯이 Entity Framework 4.0 (VS2010에서 사용 가능)은 기능과 성숙도면에서 nHibernate보다 조금 뒤떨어져 있지만 크게 향상되었습니다. –

답변

0

깨졌습니까? 특정 DB 스키마 패턴 만 인식한다고 말하는 것이 더 정확합니다.

EF는 다른 패턴을 지원하지만 직접 EDMX를 작성해야합니다. GUI 디자이너가 모든 것을 올바르게 얻길 원한다면 expedcts 패턴을 따라야합니다.

Users_Roles은 두 컬럼의 UserIdRoleId 그는 해당 테이블에 모두 FKS을하고, 경우에 두 개의 열이 함께 다음 테이블의 PK, 을 경우 테이블을 매핑하는 올 것이다이있는 경우 너의 부분에 아무런 작업도하지 말고.

그렇지 않으면 EDMX 형식을 연구하고 직접 매핑해야합니다. 당신이 발견 한대로, 그것은 더 까다 롭습니다.

+0

문제는 매핑이 아닙니다. 문제는 디자이너 자체가 새로 고칠 때 매핑을 제대로 업데이트하지 않는다는 것입니다. 매핑이 추가되기 전에 존재하는 경우 매핑을 올바르게 인식합니다.edmx; 테이블을 추가 한 다음 MSSQL에서 스키마를 변경하면 새 매핑 (100 % 정확함에도 불구하고)이 인식되지 않고 문제가 발생합니다. –

+0

그 모든 것을 이해합니다. 문제는 GUI 디자이너가 SSDL을 재생성하지만 CSDL 또는 MSL은 다시 생성하지 않는다는 것입니다. 그것은 당신이 만든 모든 사용자 정의를 유지하고자 할 수 있다고 가정합니다. 스키마를 실질적으로 변경하는 경우 연관을 위해 EDMX에서 매핑 스키마를 지워야합니다. –

+0

설명해 주셔서 고맙습니다. 저는 이제 CSDL과 MSL을 배우면서 눈을 뜨고 미래의 삶을 편하게 만듭니다. –

관련 문제