我的需求是基于数据库表中存在的值创建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