EF 4.3에서 복합 키를 사용하여 AddOrUpdate로 데이터를 시드하는 방법


101

일부 테스트 데이터로 개발 데이터베이스를 시드하려고합니다.

내가 사용했던 context.People.AddOrUpdate(p => p.Id, people));많은 성공.

시드해야하는 다른 테이블이 있는데, 여기에서 기본 키를 알 수 없습니다.

예를 들어, 일치하는 이름과성에 따라 AddOrUpdate를 원합니다.

식을 올바르게 작성하는 방법을 잘 모르겠습니다.

context.People.AddOrUpdate(p => p.FirstName && p.LastName, people);

분명히 부정확하지만 내가 찾고있는 해결책이 전달되기를 바랍니다.

답변:


200

이 시도:

context.People.AddOrUpdate(p => new { p.FirstName, p.LastName }, people);

12
@LadislavMrnka 식별자가 복잡한 유형이되어야한다면 context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)어떨까요?
— gabe

3
@LadislavMrnka, 또한 속성이 nullable 형식이면 어떻게 될까요? 즉 context.People.AddOrUpdate(p => new { p.Birthdate }, people)?
— stack247

2
여기서 주목해야 할 점은 '사람'컬렉션이 목록이 아닌 ARRAY 여야한다는 것입니다. 엔티티 목록이있는 경우 목록에서 .ToArray ()를 호출하면됩니다. 나는 그 일 : 고투 - 좋은 대답을
— 딘 마틴에게

1
작동하지 않습니다. 아마도 (복합 키에 지정된 3 개의 속성 외에) 자동 생성 된 번호가있는 다른 ID 필드가 있기 때문일까요?
— Sonic Soul

@LadislavMrnka는 마이그레이션 후 데이터베이스 필드를 업데이트하고 마이그레이션 폴더 (Configuration.cs 및 ...)를 유지해야합니까 ???
— AminM

1

Only primitive types or enumeration types are supported in this context.탐색 속성을 사용하여 얻은 경우 -외래 키 속성을 엔터티에 직접 추가하는 것을 고려하고 (게터에서만 가능) Ladislav Mrnka가 제안한 대로 사용하십시오 .


code first접근 방식 에서 다른 테이블 외래 키의 탐색 속성을 추가하는 방법은 무엇입니까? 나는 같은 구조를 가지고 context.People.AddOrUpdate(p => new { p.Name.FirstName, p.Name.LastName }, people)있습니까? 그것은이 가능
— darji yogen

I 세트 게터 속성 오류가있는 경우The specified type member 'NameId' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
— yogen darji는
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.