2015-01-15 4 views
1

Fluent API를 사용하여 구성한 엔티티가 있습니다. 속성에 대해 HasColumnOrder를 확인합니다. 내가엔티티 프레임 워크 복합 기본 키 - 열 순서를 얻는 방법

DbSet()를 사용하여 엔티티를 찾을 수 있도록

public class SomeEntityMap : EntityTypeConfiguration<SomeEntity> 
{ 
    public SomeEntityMap() 
    { 
     // Primary Key 
     this.HasKey(t => new { t.Id, t.BarId }); 

     this.ToTable("SomeEntity", "Foo"); 
     this.Property(t => t.Id).HasColumnName("Id").HasColumnOrder(0); 
     this.Property(t => t.BarId).HasColumnName("BarId").HasColumnOrder(1); 

     // additional properties removed for brevity 
    } 
} 

는 일반적인 방법의 일환으로, 나는 엔티티의 키를 찾을 수 있어야합니다.

) (찾기 이 때 기본 키 값 을 올바른 순서으로 전달해야합니다.

ObjectContext에서 키 이름을 가져올 수 있지만 주문을받을 위치를 볼 수 없습니다. 누구든지 도와 줄 수 있습니까?

답변

1

이 시도 :

.Where(p => p.MetadataProperties.Any(m => m.PropertyKind == PropertyKind.Extended 
            && Convert.ToString(m.Value) == "Identity")) 
+0

키가 기본 키에 추가 된 순서대로 키를 제공합니까? – obaylis

+0

네, 그렇습니다. 이 기사를 확인하면이 코드를 어떻게 사용할 수 있는지 더 잘 이해할 수 있습니다. https : //michaelmairegger.wordpress.com/2013/03/30/find-primary-keys-from-entities-from-dbcontext/ – octavioccl

1

// Primary Key 
this.HasKey(t => new { t.Id, t.BarId }); 
같은 코드를 추가 할 필요가 없습니다 : 당신은 자동으로 키를 생성 찾으려면

var adapter = (IObjectContextAdapter)db; 
    var objectContext = adapter.ObjectContext; 
    var objectSet = objectContext.CreateObjectSet<SomeEntity>(); 
    var entitySet = objectSet.EntitySet; 
    var keyNames = entitySet.ElementType.KeyMembers    
       .Select(e => e.Name).ToList(); 

가, 다음이 WhereSelect 전과 추가

사용자 만

// Primary Key 
this.HasKey(t =>t.Id);