2011-04-13 2 views
9

엔티티에 대해 "기본"ID 생성 지원을 구현하고 싶습니다.EntityFramework가있는 엔티티에 ID 할당 4

엔터티를 저장할 때 EntityFramework가 이미 설정되지 않은 경우 엔티티의 id 값만 생성하도록하고 싶습니다. ID가 이미 0이 아닌 값이 아닌 경우 해당 엔티티가 데이터베이스에 저장 될 때 해당 엔티티 ID를 보존해야합니다.

기존 데이터 모델 (이전 데이터베이스에서 만든 EntityFramework 모델)에서 새로 만든 (모델 우선) EntityFramework 모델로 데이터를 마이그레이션하고 있습니다. 구 모델 A와 새 모델 T를 호출합시다.

일반적으로 T 엔티티는 저장시 ID 설정을 원합니다 (모두 int64 임). 새 모델을 장기간 사용하려면 .

현재 내가 마이그레이션 할 해당 A 엔티티의 ID를 기반으로 T 엔티티 ID를 명시 적으로 할당하고 있습니다. 따라서 마이그레이션 결과를 쉽게 확인할 수 있습니다.

그러나 T 엔티티 ID를 마이 그 레이션 루틴의 A 엔티티와 동일한 ID에 할당 할 수 있지만 엔티티를 저장 한 후에는 Id 값이 변경되었습니다.

T 모델의 모든 엔티티에 대한 기본 저장 방법을 덮어 쓸 수있는 방법이 있습니까? 예를 들어, 저장하기 전에 엔티티에 아직 설정되지 않은 경우에만 id 값이 할당됩니까?

다른 EntityFramework/Id 질문을 여기에서 보았습니다. 그러나 내 마음에 그들 중 누구도 똑같은 질문을하지 않습니다.

모든 리드 주셔서 감사합니다.

답변

3

나는 당신이 Model First를 사용하고 있다고 언급했음을 본다. 그러나 몇 가지 도움이 될 수있는 코드 우선 샘플이 있습니다.

T 엔티티에서 id 속성에 [Key] 속성이 있습니까? 그렇다면 다른 속성 인 DatabaseGeneratedAttribute을 사용하여 ID를 강제로 설정할 수 있습니다. 또한

public class SomeEntity 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int? SomeEntityID { get; set; } 
} 

, 유사한 결과를 달성하기 위해 유창함 API 호출이 :

public class YourContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder dbModelBuilder) 
    { 
     base.OnModelCreating(dbModelBuilder); 

     var config = dbModelBuilder.Entity<SomeEntity>(); 
     config.Property(e => e.SomeEntityID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 데이터베이스에서 ID를 설정하지 않겠다는 의미입니까? 그렇다면 생성 모델은 이미 데이터베이스에서 ID 생성을 완전히 비활성화하는 엔티티의 속성에 설정할 수 있습니다. 내가 찾고있는 것은 이미 할당되지 않은 경우 데이터베이스에 자동으로 ID를 할당하는 것입니다. IOW, 조건부 또는 기본 할당. –

+0

위의 코드는 실제로 키가 설정되지 않도록 강제합니다. 우리가 당신이 찾고있는 것과 다르다고 들립니다.EF가 당신을 도울 수있는 일은 아무것도 없습니다. –

+0

답장을 보내 주셔서 다시 한 번 감사드립니다, 에드. 데이터 마이그레이션을 수행하고 명시 적으로 마이그레이션 코드 자체에 부분 클래스를 넣어 키를 할당 한 다음 EF가 새 프로덕션 응용 프로그램에서 나를 위해 키를 생성하도록 허용해야하는 시나리오에서이 기술을 사용할 수 있다고 생각합니다. 난 당신의 대답을 upvote거야,하지만 여전히 * 내 질문에 설명 된 동작을 얻을 싶습니다 * 대답으로 그것을 선택하지. –

3
계속 검색 후

, 읽기, 토론 나는 현재보다 EF에 대한 자세한 내용을 알고 친구들과 내가, this blog post에서 설명한대로 현재 Entity Framework 구현에서 찾고자하는 것을 달성 할 수있는 실용적이고 지속 가능한 유일한 방법은 사용자 지정 Entity Framework 공급자를 만드는 것입니다.

내가 이것을 구현할 시간이 있든 없든간에 알아야 할 것이지만, 적어도이 대답을 마무리 짓는 줄 알았습니다. 커스텀 프로 바이더는 엔티티에 대한 쓰기 속성의 읽기/암호화에 대해서도 해독을 구현할 수 있습니다.

이러한 기능은 모두 향후의 EntityFramework 릴리스에서 구할 수 있기를 바랍니다.

관련 문제