IT TIP

오류 3002 : 조각 매핑 문제 |

itqueen 2020. 12. 9. 22:03
반응형

오류 3002 : 조각 매핑 문제 | 엔티티에 대한 C # linq


콘솔 응용 프로그램이 있고 응용 프로그램이 실행될 때마다 날짜와 시간이 데이터베이스 내의 테이블로 전송됩니다.

테이블 구조는 다음과 같습니다.

FTPRuns

ID int

Last Run datetime

충분히 간단합니다.

이 새로운 변경 사항을 반영하기 위해 응용 프로그램 내에서 model.edmx를 업데이트했지만 이제는 아래 오류가 발생하고 그 의미를 완전히 확신 할 수 없습니다.

오류 3002 : 줄 1330에서 시작하는 조각 매핑 문제 : 테이블 FTPRuns 키 (FTPRuns.ID)의 잠재적 런타임 위반 : 열 (FTPRuns.ID)이 개념적 측면의 EntitySet FTPRuns 속성 (FTPRuns.ID)에 매핑되지만 그렇지 않습니다. EntitySet의 주요 속성 (FTPRuns.ID, FTPRuns.LastRun)을 구성합니다.

다음은 데이터베이스를 업데이트하는 데 사용하는 코드 스 니펫입니다.

 using (ModelContainer ctn = new ModelContainer())
            {
                try
                {
                    FTPRun ftp = new FTPRun
                    {
                        LastRun = DateTime.Now
                    };

                    ctn.FTPRuns.AddObject(ftp);

                    int changes = ctn.SaveChanges();

                    Console.WriteLine(changes.ToString() + " Changes saved");
                    Console.WriteLine("The LastRun Date Has Been Updated");
                }
                catch (InvalidOperationException ex)
                {
                     Console.WriteLine(ex.ToString());
                }
            }

누군가 나를 도울 수 있다면 나는 매우 감사 할 것입니다 :)

감사.


귀하의 개체 모델은 두 가지 속성의 조합이 FTPRuns.IDFTPRuns.LastRun테이블에만 열을가하면서 기업 키로을 FTPRuns.ID기본 키를. 따라서 모델에서 FTPRuns.ID의 조합은 FTPRuns.LastRun고유해야하며 데이터베이스에는 FTPRuns.ID고유해야하는 더 강력한 요구 사항이 있습니다.

FTPRuns.LastRun항목 키에서 속성 제외하면됩니다 . 실수로 발생했거나 Entity Framework가 데이터베이스에서 기본 키 정보를 가져올 수 없어 엔터티 키를 유추해야 할 수 있습니다. 예를 들어 뷰에는 기본 키가 없으며 Entity Framework는 엔터티 키를 nullable이 아닌 모든 열의 조합으로 유추합니다.


Daniel Brückner 솔루션이 완벽하게 작동했습니다! 아래는 본질적으로 그가 지시 한 내용이지만 그래픽 형식으로되어있어 게으른 독자에게 도움이 될 수 있습니다 :).

당신이 찾고 싶은 것은 모델에있는 당신의 PK입니다.

여기에 이미지 설명 입력

라는 PK가 있음을 알 수 있습니다 id. 이제 EF 모델을 보면 :

여기에 이미지 설명 입력

지정된 하나의 키만 볼 수 있습니다. 나에게 이것은 사실이 아니었고 4 개의 열 모두가 열쇠였다.

열 (VS의 EF 다이어그램에서)을 마우스 오른쪽 버튼으로 클릭하면 선택 / 선택 해제 옵션이 표시됩니다. Entity Key:

여기에 이미지 설명 입력

이것이 귀하의 모델과 일치하는지 확인하십시오. 제 경우에만 id선택하고 프로젝트를 저장하고 빌드해야합니다.


이것은 (데이터베이스에서) 테이블의 키 필드를 변경하고 엔티티 모델을 업데이트했을 때 나에게 발생했습니다.

The old key was still there in the model, so I went into the object's properties in the .edmx file and set the key to False. That fixed it.


I erased the table from the edmx (on edmx choose the table that cause problem -> right click - > delete) and then perform "updated model from database"

that fixed it for me


I deleted the entity and class from the Model Browser and did an Update from Database making sure to select the table. This resolved the issue for me.


I forgot to set a primary key when creating a new table, so I went to SQL Management Studio in order to do it. Once done, I updated the model.edmx file to reflect the changes and got the 3002 error.

모델을 업데이트 할 때 수행 한 작업은 테이블의 모든 열을 "엔티티 키"로 설정하는 것이 었습니다. 따라서 model.edmx 파일을 볼 때 관련 테이블을 찾고 다른 속성을 마우스 오른쪽 버튼으로 클릭하여 기본 키에만 "엔티티 키"가 선택되어 있는지 확인합니다. 그것은 내 문제를 해결했습니다.


테이블의 기본 키가 있는지 확인한 다음 1) .edmx 파일을 열고 모든 테이블을 선택하고 모델에서 삭제합니다. 2) DB에서 모델 업데이트 및 필요한 모든 테이블을 다시 추가


edmx에서 모든 테이블을 지운 다음 "데이터베이스에서 모델 업데이트"를 삭제했습니다. 또한 데이터베이스 소유자가 있는지 확인하십시오.

참고 URL : https://stackoverflow.com/questions/4283923/error-3002-problem-in-mapping-fragments-c-sharp-linq-to-entities

반응형