Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在C#中动态生成枚举?_C#_Asp.net_Sql_Entity Framework_Enums - Fatal编程技术网

有没有办法在C#中动态生成枚举?

有没有办法在C#中动态生成枚举?,c#,asp.net,sql,entity-framework,enums,C#,Asp.net,Sql,Entity Framework,Enums,在我的应用程序中有两个表 T级 事件 用户ID 日期 事件类型 tblEventTypes 事件类型ID 事件名 tblEvents包含应用程序中发生的事件日志。向日志中添加事件时需要的列之一是事件类型。事件类型必须是tblEventTypes中存储的事件类型的ID 在使用实体框架的应用程序中,我为存储过程创建了一个函数导入,该存储过程将事件添加到tblEvents。目前,我将事件类型的整数传递到由函数导入创建的方法中。这对我来说似乎是不可读的,因为如果不查看数据库、查找事件类型表并查看

在我的应用程序中有两个表

T级
  • 事件
  • 用户ID
  • 日期
  • 事件类型
tblEventTypes
  • 事件类型ID
  • 事件名
tblEvents包含应用程序中发生的事件日志。向日志中添加事件时需要的列之一是事件类型。事件类型必须是tblEventTypes中存储的事件类型的ID

在使用实体框架的应用程序中,我为存储过程创建了一个函数导入,该存储过程将事件添加到tblEvents。目前,我将事件类型的整数传递到由函数导入创建的方法中。这对我来说似乎是不可读的,因为如果不查看数据库、查找事件类型表并查看它是什么事件,您就不知道整数的含义


我想创建一个枚举来表示事件类型。是否有方法创建基于tblEventTypes中的数据生成的动态枚举?就像EF如何基于数据库中的表生成实体一样,我希望基于表及其当前数据生成枚举。因此,添加事件类型将是向tblEventTypes添加一行,然后在EF设计器中运行更新,或者在代码中自动更新我的枚举。

您不能为此使用EF设计器,但可以使用来生成枚举

我已经多次遇到这种情况,我总是决定显式定义事件类型,并为每个条目创建一个枚举,例如

Public enum EventType
{
     Info = 100,
     Error = 200
 }
我将创建一个db脚本,在数据库中创建项目,并手动保持它们的同步

我看不出将它们作为动态类型使用有什么意义,因为您只会以显式方式使用它们(例如录制特定类型的事件)


据我所知,EF不支持实体记录建模,只支持模式

Hmmm,我从未想过这一点。有趣。我是T4模板的新手。这正是我想要的。如果EF是本机生成的,那就太好了。对,我们的想法是使枚举显式化,只要我执行“更新模型”,它就会由数据库中的数据生成。我希望EF有enum支持,那会很酷。是的,当你插入一条记录时,你会写一些东西,比如myEntity.EventTypeId=(int)EventType.Info;是 啊我知道我可以手动创建枚举。我只是设想一些代码生成,就像EF目前对数据库模式所做的那样,只有这样才能真正读取表中的记录来创建枚举。当他们最终将代码优先作为一个值得尊敬的设计选择时,我会更加激动。然后,您可以执行相反的操作,并使代码内枚举生成一个与使用它的表具有关系的枚举db表。那太棒了!微软刚刚发布了EntityFramework 4.2的CTP,它支持枚举映射,这是一个进步。我认为它实际上不会从值中创建数据(但我可能错了,还没有使用它)