我是MVC和实体框架的新手。对于研究,我正在开发一个网站,其中有一个页面用于创建要在网站上销售的产品......
一种产品可以有许多应用,一种应用可以与许多不同的产品一起使用。
例如:产品编号:1名称:椅子,应用:坐,燃烧
产品编号:2名称:表格,应用:燃烧
申请号:1名:坐席
应用程序ID:2名称:刻录
产品类
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Application> Applications { get; set; }
申请类
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Product> Products { get; set; }
上下文文件:
public DbSet<Product> Products { get; set; }
public DbSet<Application > Applications { get; set; }
modelBuilder.Entity<Product>()
.HasMany(c => c.Applications).WithMany(i => i.Products)
.Map(t => t.MapLeftKey("ProductId")
.MapRightKey("ApplicationId")
.ToTable("ProductApplication"));
我的问题:
1)我的实体是否适合我想做的事情?我的意思是,EF会创建一个桥接表来链接这两个表(产品和应用程序)?
2)如何让“创建”视图显示数据库中可用的所有应用程序,供用户选择他们希望创建的产品的应用程序数量?
修改
所以,我的EF创建了我想要的桥接表ProductApplication,到目前为止一直很好。
在我的创建视图中,我列出了DB中可用的所有应用程序,如下所示:
<div class="form-group">
@Html.LabelFor(model => model.Applications, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@foreach (Application app in ViewBag.Aplications)
{
<input type="checkbox" id="@app.Id" name="Applications"/>@app.Nome
}
</div>
</div>
显示它们没问题,但是当我提交时,发送到操作的Product对象的Applications属性等于0.
我需要此产品才能拥有在视图中选择的应用程序,我做错了什么?