簡體   English   中英

EF Core 6 中的 GetColumnName() 返回未映射列名的屬性名

[英]GetColumnName() in EF Core 6 returns property name not mapped column name

我將 EF Core 6 (6.0.2) 與 SQL Server 2019 與以下實體一起使用:

public partial class MyEntity
{
        [Column("External_ExternalId")]
        public Guid? ExternalId { get; set; }
}

我正在嘗試使用以下代碼獲取ExternalId屬性的映射列名稱 ( External_ExternalId ):

var entityType = dbContext.Model.FindEntityType(typeof(MyEntity));
var property = entityType.GetProperties().Single(property => property.Name.Equals("ExternalId", StringComparison.OrdinalIgnoreCase));
var columnName = property.GetColumnName(StoreObjectIdentifier.Create(property.DeclaringEntityType, StoreObjectType.Table).GetValueOrDefault());

columnName 是ExternalId而不是External_ExternalId 如何獲取表列的實際名稱? 我嘗試了GetColumnBaseName()但得到了相同的結果。 如果我使用流利的 API 配置映射,則相同。

因為列名是使用[Column(...)]屬性定義的,所以您可以通過查找附加到 class 屬性的ColumnAttribute對象來獲得所需的結果,如下所示:

public static void PrintValueOfColumnAttribute()
{
    PropertyInfo[] props = typeof(MyEntity).GetProperties();
    foreach (PropertyInfo prop in props)
    {
        foreach (var attr in prop.GetCustomAttributes(true))
        {
            if (attr is ColumnAttribute columnAttr)
            {
                Console.WriteLine(prop.Name + " -> " + columnAttr.Name);
            }
        }
    }
}

結果:

ExternalId -> External_ExternalId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM