У меня есть объект, который я настроил с использованием 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, но я не вижу, где получить заказ. Может ли кто-нибудь помочь?
Попробуй это:
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"))
Не нужно добавлять код в качестве этого
// Primary Key
this.HasKey(t => new { t.Id, t.BarId });
Только пользователь
// Primary Key
this.HasKey(t =>t.Id );