我的需求是基於數據庫表中存在的值創建Enum。我正在使用ADO.NET實體框架模型(.edmx文件),你們中的任何一個人都可以幫助我。使用ADO.NET實體框架從表中存在的值生成枚舉
9
A
回答
10
使用T4模板可能會容易很多。 Here is a really good article on getting started
我在下面的例子中使用了一個直接的SQL連接,但正如你所看到的,你可以包含任何代碼並生成你喜歡的任何輸出到編譯到你項目中的cs文件中。你可以用下面的ADO語法來代替通過你的Entituy Framework模型檢索的對象集合並相應地輸出。
在您希望生成枚舉文件的目錄中創建擴展名爲.tt的文件。如果您將文件命名爲XXXXX.tt,則會生成一個名爲XXXXX.cs的文件,以便適當地命名該tt文件。
嘗試沿着這些線。您可能需要對語法和輸出進行一點實驗,但是我不會爲您編寫所有內容,或者您不會學到任何東西:)
請注意,此數據庫調用將會發生每次你編輯tt文件。
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Data" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SqlClient" #>
<#
SqlConnection sqlConn = new SqlConnection(@"Data Source=XXXX;Initial Catalog=XXXX; Integrated Security=True");
sqlConn.Open();
#>
namespace AppropriateNamespace
{
public enum YourEnumName
{
<#
string sql = string.Format("SELECT Id, Name FROM YourTable ORDER BY Id");
SqlCommand sqlComm = new SqlCommand(sql, sqlConn);
IDataReader reader = sqlComm.ExecuteReader();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
while (reader.Read())
{
sb.Append(FixName(reader["Name"].ToString()) + " = " + reader["Id"] + "," + Environment.NewLine + "\t\t");
}
reader.Close();
sqlComm.Dispose();
#>
<#= sb.ToString() #>
}
}
嘗試改進這一點。不是寫入StringBuilder,而是輸出每個reader的結果。直接讀取()到輸出。此外,我還包含了一個尚不存在的FixName方法,但您可能需要這樣做才能取出空格或非法字符。
7
丹尼爾的模板是好的,所有的,但我已經把一些更多的精力放在such a template所以它所有的這些:
- 有明確的整數值產生枚舉值;
- 使用Visual Studio的命名空間命名約定,因此生成的枚舉具有項目的默認命名空間和任何子文件夾(就像Visual Studio中的任何代碼文件一樣);
- 通過使用附加的描述表列值來添加完整的枚舉XML文檔;如果你沒有這些沒關係;
- 正確命名生成的文件並在代碼中添加一個附加屬性,以便生成的
enum
不會被代碼分析檢查; - 多字查詢表值正確連接到pascal套裝等價物(即多字值變爲
MultiWordValue
); - 枚舉值始終以字母開頭;
- 所有枚舉值只包含字母和數字,其他所有值都被刪除;
無論如何。在this blog post中,所有內容都非常詳細。
+2
非常好。好後續 – 2013-05-10 22:55:14
相關問題
- 1. 枚舉與實體框架 - 枚舉值獨立於錶行ID
- 2. 實體框架 - WCF - 枚舉?
- 3. 實體框架,保存枚舉集合
- 4. ADO.NET實體框架 - 預生成視圖 -
- 5. 在實體框架表中使用枚舉:用於什麼?
- 6. 從表與實體框架/ ADO.NET刪除
- 7. 實體框架的枚舉控制器
- 8. ADO.NET實體框架
- 9. ADO.NET - 在實體框架使用AsQueryable已()
- 10. ADO.Net實體框架從XSD文件生成模型
- 11. 實體框架4.2枚舉支持
- 12. 實體框架5枚舉命名
- 13. 實體框架 - 一般堅持枚舉?
- 14. 實體框架DB頭和枚舉
- 15. 實體框架僅作爲POCO枚舉
- 16. 使用ADO.NET實體框架攔截實體保存
- 17. 實體框架實體中枚舉類型的屬性?
- 18. T4從SQL Server表生成枚舉值
- 19. 異常,而使用實體框架枚舉值傳遞給存儲過程6
- 20. 如何在ADO.NET實體框架中使用存儲過程
- 21. Databind ADO.NET實體框架到列表框
- 22. ADO.net實體框架的API
- 23. 錯誤使用ADO.NET實體框架
- 24. 使用與ADO.NET實體框架
- 25. 使用ado.net實體框架排序gridview
- 26. 在一個表中使用ADO.NET實體框架多個FK
- 27. 存儲過程與ADO.NET實體框架
- 28. ADO.NET實體框架ObjectContext - 緩存問題
- 29. 三層架構使用ADO.NET實體框架和簡易ADO.NET類
- 30. 如何在ADO.NET實體框架4中從Edmx Diagram生成類圖?
我不知道笏是T4模板.. – 2010-04-14 09:20:05
我目前正在尋找一個有用的鏈接 – 2010-04-14 09:21:42
好的..謝謝... – 2010-04-14 09:23:18