实体框架复合主键 - 如何获取列的顺序

时间:2015-01-15 14:04:55

标签: c# entity-framework-5 entity-framework-6

我有一个使用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()。查找()

我需要以正确的顺序传递主键值

我可以从ObjectContext获取密钥名称,但我看不到从哪里获取订单。有人可以帮忙吗?

2 个答案:

答案 0 :(得分: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();

如果您想查找自动生成的密钥,请在Where之前添加此Select

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

答案 1 :(得分:1)

不需要像这样添加代码

// Primary Key
this.HasKey(t => new { t.Id, t.BarId });

仅限用户

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