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.