![](/img/trans.png)
[英]Entity Framework using Database.SqlQuery() where column names are invalid C# member names
[英]Entity Framework and database column names
我正在嘗試修改POCO T4模板,以在數據庫中包含與每個屬性對應的列的名稱。 由於遺留的原因,我們的數據庫表是8.3,我們的列最多10個字符,所以事情往往會被取消。 能夠快速查找給定屬性對應的列將是一個很大的幫助。
鑒於此,我不知道如何去做這件事。 我對編輯T4模板的想法很滿意,我只是不知道如何從EdmProperty對象中檢索列名。
誰能指出我正確的方向?
我已經在其他一些答案中討論了這個問題,但我找不到它。 問題是,要獲取此信息,您需要瀏覽映射的MSL部分 - 列映射到屬性的部分。 不幸的是,MSL元數據項的整個API是內部的(我認為未來EF版本的一個目標是公開它)。 如果您有用於類生成的T4模板,則通常使用CSDL - 即實體描述,它僅包含您在EDMX圖和實體屬性窗口中看到的信息。
我不會說這是解決這個問題的最佳方法,但這就是我做到的。 我需要能夠以純文本檢索列名稱以綁定到BoundField asp控件,並且沒有將其烘焙到EF模板中。
所以,我添加了一些代碼,只是加載了“簡單屬性”,即:列名,允許我這樣做。 它為名為“ColumnNames”的“table”對象添加了一個結構體,並將列名稱公開為const字符串。
<#
if (simpleProperties.Any())
{
#>
public struct ColumnName
{
<#
foreach (var simpleProperty in simpleProperties)
{
#>
public const string <#= simpleProperty #> = "<#= simpleProperty #>";
<#
}
#>
}
<# }
#>
}
我把它放在T4模板中的這段代碼之前,該模板在解決方案中的edmx文件下生成單個文件:
<#
EndNamespace(code);
}
這將創建如下所示的代碼:
public partial class JobPosting
{
public int PositionRowId { get; set; }
public System.Guid PositionRelatedGuid { get; set; }
public struct ColumnName
{
public const string PositionRowId = "PositionRowId";
public const string PositionRelatedGuid = "PositionRelatedGuid";
}
}
我希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.