2015-01-15 82 views
1

我有一個實體,我已經使用Fluent API進行了配置。注意屬性上的HasColumnOrder。實體框架複合主鍵 - 如何獲得列的順序

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 
    } 
} 

作爲一種通用方法的一部分,我希望能夠找到一個實體的按鍵,所以我可以找到使用

DbSet()的實體。find()方法

我需要以正確的順序傳遞主鍵值

我可以從ObjectContext獲取鍵名,但我看不到從哪裏獲得訂單。誰能幫忙?

回答

1

試試這個:

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

.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 }); 

只有用戶

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