[英]Entity framework composite primary key - how to get order of columns
I have an entity which I have configured using the Fluent API. 我有一个使用Fluent API配置的实体。 Notice the HasColumnOrder on the properties.
注意属性上的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
}
}
As part of a generic method, I want to be able to find an entity's keys so I can find an entity using 作为通用方法的一部分,我希望能够找到实体的键,以便可以使用
DbSet().Find()
DbSet()。find()方法
to which I need to pass the primary key values in the correct order . 我需要以正确的顺序将主键值传递给该键。
I can get the key names from the ObjectContext but I cannot see where to get the order. 我可以从ObjectContext获取键名,但是看不到从哪里获得订单。 Can anyone help?
有人可以帮忙吗?
Try this: 尝试这个:
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();
If you want to find the auto generated keys, then add this Where
before the Select
: 如果你想找到自动生成的密钥,然后添加此
Where
的前Select
:
.Where(p => p.MetadataProperties.Any(m => m.PropertyKind == PropertyKind.Extended
&& Convert.ToString(m.Value) == "Identity"))
Not need to Add code as this 不需要这样添加代码
// Primary Key
this.HasKey(t => new { t.Id, t.BarId });
Only user 仅限使用者
// Primary Key
this.HasKey(t =>t.Id );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.