【问题标题】:Entity Framework enum attribute to table column (code-first approach)实体框架枚举属性到表列(代码优先方法)
【发布时间】:2015-10-30 14:51:55
【问题描述】:

在 ASP.NET 中,我使用具有代码优先方法的实体框架,我希望根据我的模型生成数据库表。其中一个属性是 Enum 值,它没有在生成的表中显示为列。

这是我的枚举:

public enum MyEnum
{
    val_one = 1,
    val_two = 2,
    val_three = 3
}

这是我的模型:

public class MyModel
{
    public int Id { get; set; }
    public string attrString { get; set; }
    public double attrDouble { get; set; }
    public MyEnum attrEnum { get; set; }
}

因此,使用代码优先的方法,我生成了包含以下列的表:

CREATE TABLE [dbo].[MyModel] 
(
    [Id]           INT            IDENTITY (1, 1) NOT NULL,
    [attrString]   NVARCHAR (MAX) NOT NULL,
    [attrDouble]   FLOAT (53)     NOT NULL,
    [attrEnum]     INT            NOT NULL,
    CONSTRAINT [PK_dbo.MyModel] PRIMARY KEY CLUSTERED ([Id] ASC)
);

稍后在基于模型生成表单(控制器和视图)时,我有一个缺少attrEnum 参数的表单。

那么如何继续以便在表单中拥有这个枚举属性(以下拉列表的格式)(仍然使用代码优先的方法)。我想可能需要生成另一个包含枚举的数据库表,但我真的不确定如何在实体框架中做到这一点,因为我是它的初学者。

【问题讨论】:

标签: asp.net entity-framework enums ef-code-first entity-framework-migrations


【解决方案1】:

您可以采取更简单的方法...

在控制器中,例如:

 public ActionResult Edit(int? id)
    {
      List<SelectListItem> myOptions = new List<SelectListItem>();
      myOptions.Add(new SelectListItem() { Text="1", Value = "1" });
      myOptions.Add(new SelectListItem() { Text = "2", Value = "2" });
      myOptions.Add(new SelectListItem() { Text = "3", Value = "3" });
      ViewData["OptionList"] = new SelectList(myOptions, "Value", "Text");

然后在Edit.cshtml中:

  @Html.DropDownListFor(model => model.Status, (SelectList)ViewData["OptionList"], new { @class = "form-control dropdown" })  

你会得到一个漂亮的下拉菜单,其中包含你正在寻找的选项。

【讨论】:

    猜你喜欢
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多