Asp.net mvc 使用实体框架的0-N关系
提前感谢您的支持 Im在mvc5应用程序中使用实体框架 我使用数据库的方式是: 我创建了一个带有表属性的模型类,例如: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 {
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映射,如果有帮助,不要忘记标记为答案,但这不是一个完整的代码,您需要管理初始状态,即选中的收音机或第一次显示的下拉列表,管理回发等