C# 使用EF 6.1从模型优先设计创建枚举值

C# 使用EF 6.1从模型优先设计创建枚举值,c#,powershell,enums,entity-framework-6,C#,Powershell,Enums,Entity Framework 6,我只是想了解如何使用模型优先设计在实体中创建一列作为枚举类型 在附图中,您可以看到我在右侧窗格中创建了一个简单的控制台应用程序,并在左侧添加了一个EDM模型,其中一个实体名为Teacher 我点击EDM设计器,选择了在中间窗格中看到的添加新EnUM类型。这三种类型是永久、合同和来宾,在TeacherType枚举类型1,2,3中有各自的值 如何将左窗格上的教师类型**属性转换为中间窗格中的枚举值教师类型?* 此外,如果您更新了模型,而模型又会更新数据库,您会丢失更改吗?我相信模型优先,但数据库优

我只是想了解如何使用模型优先设计在实体中创建一列作为枚举类型

在附图中,您可以看到我在右侧窗格中创建了一个简单的控制台应用程序,并在左侧添加了一个EDM模型,其中一个实体名为Teacher

我点击EDM设计器,选择了在中间窗格中看到的添加新EnUM类型。这三种类型是永久、合同和来宾,在TeacherType枚举类型1,2,3中有各自的值

如何将左窗格上的教师类型**属性转换为中间窗格中的枚举值教师类型?*

此外,如果您更新了模型,而模型又会更新数据库,您会丢失更改吗?我相信模型优先,但数据库优先,我相信你会的。是否也有一种方法可以先对数据库执行相同的操作


“代码优先”很好,但我觉得它还有一段路要走,因为所有需要手动执行的Powershell命令,以及所有额外的负担,如定义关系、FK、种子等,都在代码中。这需要花费大量时间,我觉得在设计器中可以轻松地更快地完成,并且错误更少。

我认为您可能缺少一些步骤。请查看以下内容,特别是更改属性中的值类型


右键单击属性并选择Convert To Enum(将创建新的枚举),或者右键单击属性并选择Properties(属性),然后在Properties(属性)窗口的type(类型)行中选择您的枚举类型。请注意,“转换为枚举”菜单选项仅在属性的类型可以是枚举的基础类型(即byte、short、int或long)时才会显示。请注意,EDM类型系统不支持无符号类型。如果您的属性恰好是另一种类型,则新创建属性的默认类型为字符串,您将看不到“转换为枚举”菜单选项,因为字符串不是枚举类型的有效基础类型。要在菜单中查看此选项,您必须首先转到属性并将类型更改为基础枚举类型之一


关于代码优先使用,EF Designer现在支持从数据库创建代码优先模型,因此您不再需要为现有数据库手动配置关系

Pawel,我正在从数据库中采样一个代码优先的模型,现在非常酷。我将DB中的两个表添加到应用程序中。它创建了一个带有DbSet实体以及属性和关联的模型文件。它还为每个表创建了单独的POCO类。问题是:如果我需要添加/更新/删除属性怎么办?我知道我可以更改POCO类以添加/更新/删除属性,并在模型类中反映相同的更改。如何将我在代码中所做的更改反映回数据库中?您需要决定是使用代码优先模型执行代码优先还是数据库优先。如果您有一个现有的测试数据库,并且您不关心数据,那么您可以从现有的数据库中创建一个代码优先的模型,然后去掉数据库并继续通过代码(理想情况下使用迁移)来改进您的数据库。如果你不能做到这一点,你应该改进数据库,并在每次需要时重新创建模型;2、如何将您在代码中所做的更改迁移到新的物理sql DB;或者3如果我只是想跳过迁移,我可以按照我在上一篇文章中所说的重新创建我的模型,但是我现在如何将我的模型持久化到物理数据库?删除数据库后,只需运行应用程序,EF将看到没有数据库,并将为您创建一个数据库。如果您使用迁移,我强烈建议您每次添加迁移时运行Update Database命令,它将更新数据库,看起来非常棒。。。我同意迁移是最好的选择。这样,您就不会丢失数据。但是,我在项目或菜单中的任何文件中都找不到“更新数据库”命令。。。。。