2011-04-29 2 views
0

원래는 없었던 연결을 추가하려고합니다. 나는 두 테이블이 기술적으로 관련이 있다는 것을 깨달았고 일부 탐색 속성은 수동으로해야 할 일을 단순화 할 수있었습니다. 테이블과 키는 다음과 같습니다.EF4 : 0..1 대 다수 협회 생성

Import 
Primary Key: 
    Number : Int32 
    Date : DateTime 

Hour 
Primary Key: 
    DepartmentID : Int32 
    UserNumber : Int32 
    Date : DateTime 

연관의 이름은 ImportHour입니다. Import.Number는 Hour.UserNumber에 매핑되고 Import.Date는 Hour.Date에 매핑됩니다. 가져 오기에 0..1의 연관성을 추가하려고하는데 탐색 속성 및 추가 외래 키가없는 시간에 *가 표시됩니다. 이 작업을 수행 할 때 설계자는 연결이 매핑되지 않았다고합니다. 그런 다음 DDL을 생성하면 Hours.Import_Date 및 Hours.Import_Number라는 새 필드가 생성됩니다 (Hours는 Hour 엔터티의 실제 데이터베이스 테이블 이름입니다).

Error 3021: Problem in mapping fragments starting at line 332: 
Each of the following columns in table Hours is mapped to multiple conceptual side properties: 
Hours.Date is mapped to <ImportHour.Hour.Date, ImportHour.Import.Date> 
Hours.UserNumber is mapped to <ImportHour.Hour.UserNumber, ImportHour.Import.Number>* 

내가 무슨 일이 일어나고 있는지 정말 모르겠습니다와 나는이 알아낼만큼 잘 '매핑'과정을 이해 생각하지 않는다 : 나는 수동으로 필드를 매핑 경우에, 나는 다음과 같은 오류와 끝까지 . 하나의 키가 다른 키로 매핑된다는 것을 인식하는 대신 거의 5 배 키를 원하는 것처럼 보입니다. 나는 다른 일대 다 연관을보고, 테이블 매핑조차 가지고 있지 않다. 나는 그들이 대신에 참조 제한이 있다고 생각하지만, 분명히 0..1에서 많은 연관으로 참조 제한을 가질 수는 없습니다.

+0

엔티티 개체는 어떻게 시작 되었습니까? 엔터티 개체에 대한 사용자 지정을 수행 했습니까? 그렇지 않다면 마지막으로 객체를 다시 작성하십시오 (VS에서 템플릿을 사용했다고 가정합니다). POCO 지원을 생성 한 후 POCO 엔티티를 ObjectContext에서 별도의 라이브러리로 분리하면 문제가 될 수 있습니다. – IAbstract

+0

디자이너와 함께 엔티티 개체를 만든 다음 'model from database'를 사용하여 데이터베이스를 만들기 위해 실행 한 .sql 파일을 생성했습니다. 맞춤 설정을 추가하지 않았습니다. –

+0

필자는 기존의 열을 사용하여 참조 제약 조건을 사용하여 1 대 다수의 연관성을 선택함으로써 '고정'된 것처럼 보입니다. 하지만 일치하는 가져 오기 값이없는 시간 값을로드하려고하면 어떻게 될지 잘 모르겠습니다. –

답변

0

내가 사용하는 다른 데이터베이스에서 알 수있는 한, 여기의 문제는 EF 모델이 이미 데이터베이스에 외래 키가 필요하다는 것입니다. EF를 생성 할 수는 없지만 이미 존재하는 경우 EF를 받아들입니다. (내가 말한 것과는 반대로, 은 0..1에서 많은 (null 가능) 외래 키에 대한 참조 제한이 있음).

1

관계를 정의하는 두 가지 방법이 있지만, 귀하의 경우에는 외래 키 연관을 사용해야합니다. 엔티티 모델에서 연관성을 그리면 select it and define referential constraints이어야 함을 의미합니다.

이 경우 UserNumberDateHour은 null 가능해야하므로 Import에 0..1을 사용할 수 없습니다. 그것은 그 관계가 의미하는 것입니다. 주체가 존재하지 않는 경우 (Import) 종속 엔터티의 FK 속성 (Hour)은 null입니다.

btw. 기본 키에 DateTime을 사용하면 not recommended입니다.

+0

** 이러한 경우 UserNumber 및 Date in Hour는 null 허용 가능해야하므로 가져 오기에서 0..1을 사용할 수 없습니다. ** ok ... 그건 이상한 말입니다.내가하려는 일은 마치 테이블에 레코드가 있거나 없을 수 있기 때문에 전체 외부 조인을 가능하게하는 것과 같았습니다. ** 기본 키에서 DateTime을 사용하는 것은 권장되지 않습니다. ** 링크에 제공된 이유 중 아무 것도 적용되지 않으며 DDL은 .NET DateTime 형식의 테이블을 만들었습니다. 필자가 아는 한 .NET Date 유형은 없습니다. 이 경우의 기록은 해당 날짜에 고유해야합니다. –

+0

완전 외부 조인과 같은 시나리오를 지원하려면 FKs를 Null 허용해야합니다. 그렇지 않으면 부모 엔티티가없는 관련 엔티티를 가질 수 없습니다. –

+0

1 대 다수 협회와 함께 작동하는 것으로 보입니다. 내가 확신 할 수없는 유일한 것은 내가 Hour.Inport 네비게이션 속성을 사용하면 일어날 일이다. 거기에 기록이 없으면 (왜 내가 0..1을 사용해야한다고 생각하는지). 나는 내가 시도한 것이 실제로 EF에 의해 기술적으로 지원되지 않는다고 생각합니다. 동적 SQL을 사용하면 시간 기록이 주어진 상황에서 0 개 또는 하나의 가져 오기 레코드를 찾을 수 있고 가져 오기 레코드가 있으면 Many (0 .. *) 시간 레코드를 찾을 수 있으며 null 허용 가능 키가 필요하지 않은 상황을 설정할 수있었습니다 또는 아무것도. –

0

@Sahuagin이 질문에 오랜 시간이 걸릴 수 있지만 디자이너에서 스칼라 속성을 삭제 - 예를 들어 ImportHour 연결을 만든 후에 시간에서 hour.usernumber 및 hour.date를 삭제하십시오. 실재. 이런 식으로 설립 된 독립 단체는 이러한 방식으로 설립되었습니다. 독립적 인 단체의 의미입니다.

+0

기억한다면 스칼라 속성을 삭제하면 매핑 오류가 발생합니다. 내가 '0..1 to *'협회의 의미를 오해하고있을 가능성이있다. 그 대신에'1 to *'을 만드는 것은 내가 아는 한 잘 작동했다. 그 이후 데이터베이스가 사용되어 왔고 이후로 그 데이터베이스를 조작하지 않았습니다. –