Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
Asp.net mvc 使用实体框架的0-N关系_Asp.net Mvc_Entity Framework_Asp.net Mvc 5 - Fatal编程技术网

Asp.net mvc 使用实体框架的0-N关系

Asp.net mvc 使用实体框架的0-N关系,asp.net-mvc,entity-framework,asp.net-mvc-5,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,提前感谢您的支持 Im在mvc5应用程序中使用实体框架 我使用数据库的方式是: 我创建了一个带有表属性的模型类,例如: public class Article { public int ID { get; set; } public string Name { get; set; } } 然后我使用脚手架系统生成控制器和视图。 当我的表中有外键时,我会使用: public class Article {

提前感谢您的支持

Im在mvc5应用程序中使用实体框架

我使用数据库的方式是:

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

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

        public string Name { get; set; }        
    }
然后我使用脚手架系统生成控制器和视图。 当我的表中有外键时,我会使用:

 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; }
    }
我加了一个?签名以使该字段不是强制性的,但不起作用。 我生成脚手架视图和控制器。 当我运行create视图创建新文章时。其中一个字段是选择工具的下拉菜单,但我不能让它为空,我必须选择一个字段。 如果这篇文章是一个可消费的例子,我想选择什么可消费,但留下的工具和机器空

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

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

新物业

[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=radio][name='type']”)。更改(函数(){
$('.type').hide();
$(“+$(this.val()).show();
}).change();

提交后,您获得了
类型
,只需将其他属性设置为空,这与
类型

不匹配。您可以创建一个单选按钮,绑定到新属性(未映射),然后单选按钮的类型更改,它将隐藏所有下拉列表并仅显示选定下拉列表。这是一个好主意,非常感谢你!!。[NotMapped]表示其“自定义”字段未绑定到数据库逻辑?。这对我很有用。谢谢@TxentxoTxentxako,是的,它不会被EF映射,如果有帮助,不要忘记标记为答案,但这不是一个完整的代码,您需要管理初始状态,即选中的收音机或第一次显示的下拉列表,管理回发等