【问题标题】:Entity framework composite primary key - how to get order of columns实体框架复合主键 - 如何获取列的顺序
【发布时间】:2016-02-10 16:35:48
【问题描述】:

我有一个使用 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 中获取键名,但我看不到从哪里获取订单。有人可以帮忙吗?

【问题讨论】:

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


    【解决方案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();
    

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

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

    【讨论】:

    【解决方案2】:

    不需要像这样添加代码

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

    只有用户

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2011-11-05
      • 2019-09-07
      相关资源
      最近更新 更多