Составной первичный ключ фреймворка Entity - как получить порядок столбцов

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, но я не вижу, где получить заказ. Может ли кто-нибудь помочь?

Теги:
entity-framework-6
entity-framework-5

2 ответа

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"))
  • 0
    Предоставляет ли это ключи в порядке их добавления в первичный ключ?
  • 0
    Да. Посмотрите эту статью, она поможет вам лучше понять, как вы можете использовать этот код: michaelmairegger.wordpress.com/2013/03/30/…
1

Не нужно добавлять код в качестве этого

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

Только пользователь

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню