我有这样的EntityTypeConfiguration类。
public class DummyTypeConfiguration : IEntityTypeConfiguration<DummyType>
{
public void Configure(EntityTypeBuilder<DummyType> builder)
{
builder.HasNoKey();
builder.Property(p => p.SecretId).HasColumnName("secretID");
...
}
}
我想通过使用属性 DummyType.SecretId 来检索列名称:“secretID”:
var columnName = ...(DummyType.SecretId);
EF Core 6: 可以使用以下代码来完成:
var entityType = _dataContext.Model.FindEntityType(typeof(DummyType));
var property = entityType?.GetProperty(nameof(DummyType.SecretId));
var columnName = property?.GetColumnName();
_dataContext
变量表示DbContext
类的对象实例。
使用 TPH 存储实体类层次结构时,可能会出现某些派生实体具有相同属性名称的情况。数据库表中的列名对于两个实体来说需要不同。
例如:
基类
表基类
这里提到了这种行为:https://github.com/dotnet/efcore/issues/11046
GetColumnName() 方法在这两种情况下都返回“Name”。 要获取真实的列名,必须使用参数 StoreObjectIdentifier.Table(tableName) 调用方法 GetColumnName。 这将返回 DerivedClassA 实体的“Name”和 DerivedClassB 实体的“DerivedClassB_Name”。
所以,代码是:
var entityType = _dataContext.Model.FindEntityType(typeof(DummyType));
string tableName = entityType.GetTableName();
var property = entityType?.GetProperty(nameof(DummyType.SecretId));
var columnName = property?.GetColumnName(StoreObjectIdentifier.Table(tableName));