Entity framework 复合主键 - 如何获取列的顺序
Entity framework composite primary key - how to get order of columns
我有一个使用 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();
如果要查找自动生成的密钥,请在 Select
:
之前添加 Where
.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 );
我有一个使用 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();
如果要查找自动生成的密钥,请在 Select
:
Where
.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 );