使用实体框架的0-N关系

时间:2014-08-08 09:32:16

标签: asp.net-mvc entity-framework asp.net-mvc-5

提前感谢您的支持。

我在mvc5应用程序中使用Entity框架。

我使用数据库的方式是:

我创建了一个带有表属性的模型类,例如:

 public class Article
    {
        public int ID { get; set; }

        public string Name { get; set; }        
    }

然后我使用Scaffolding系统生成控制器和视图。 当我在表格中有一个外键时,我使用它:

 public class Article
    {
        public int ID { get; set; }

        public string Name { get; set; }

        public int ProviderID {get; set;}

        public virtual Provider Providers { get; set; }
    }

一切都很好。当我访问视图时,正在使用关系,键,外键正确地创建表。

我的问题是:

我有一张条款表。每篇文章都可以是工具,消耗品或机器。但绝不是所有人(其中一个必须选择) 我发现这是一个0 - > N关系和表中的表示方式是一样的 1 - > N关系,但我不确定这个信息,因为在表中有未使用的字段有点愚蠢。

假设这是我的模型类的工作方式:

public class Article
    {
        public int ID { get; set; }

        public string Name { get; set; }

        public int? ToolID {get; set;}

        public int? MachineID {get; set;}

        public int? ConsumableID {get; set;}

        public virtual Tool t { get; set; }

        public virtual Machine m { get; set; }

        public virtual Consumable c { get; set; }
    }

我加了?签署,使这些字段不是强制性的,但它不起作用。 我生成脚手架视图和控制器。 当我运行创建视图以创建新文章时。其中一个字段是用于选择工具的下拉菜单,但我不能将其留空,我必须选择一个字段。 如果这篇文章是可靠的,例如我想选择可行的东西但是将工具和机器留空。

也许我必须在下拉列表中的视图中添加一个空字段? 在那种情况下我该怎么办?这是视图中的代码:

@Html.DropDownList("ToolID", null, htmlAttributes: new { @class = "form-control" })

1 个答案:

答案 0 :(得分:0)

像这样。

新资产

[NotMapped]
public string Type { get; set; }

广播按钮

<label>@Html.RadioButtonFor(m => m.Type, "type-tool", new { @checked = "checked" }) Tool </label>
<label>@Html.RadioButtonFor(m => m.Type, "type-machine") Machine </label>
<label>@Html.RadioButtonFor(m => m.Type, "type-consumable") Consumable </label>

放弃下降

@Html.DropDownListFor(m => m.ToolId, new SelectList(ViewBag.Tools, "Id", "Text"), new { @class = "hidden type type-tool" })
@Html.DropDownListFor(m => m.MachineId, new SelectList(ViewBag.Machines, "Id", "Text"), new { @class = "hidden type type-machine" })
@Html.DropDownListFor(m => m.ConsumableId, new SelectList(ViewBag.Consumables, "Id", "Text"), new { @class = "hidden type type-consumable" })

<强>的Javascript

<script>
    $("input[type=radio][name='Type']").change(function () {
        $('.type').hide();
        $("." + $(this).val()).show();
    }).change();
</script>

提交后,您获得Type,只需将其他属性设为null,这与Type不合适。