我有两个类ConfigurationCollection
和OptionValues
,它们有很多关系。我在网上尝试过解决方案让它运转起来。我尝试添加另一个类来创建两个一对多的关系。但我不是以正确的方式理解它。而且我也尝试了它而没有添加第三类。
模型类
public class ConfigurationCollection
{
public int ConfigurationCollectionID { get; set; }
public string CollectionName { get; set; }
public int LsystemID { get; set; }
public virtual Lsystem Lsystem { get; set; }
public virtual ICollection<OptionValue> OptionValues { get; set; }
}
public class OptionValue
{
public int OptionValueID { get; set; }
public string OptionVal { get; set; }
public int OptionID { get; set; }
public virtual ICollection<ConfigurationCollection> ConfigurationCollections { get; set; }
public virtual Option Option { get; set; }
}
public class Config_OptionVal
{
public int Config_OptionValID { get; set; }
public int OptionValueID { get; set; }
public int ConfigurationCollectionID { get; set; }
public bool OptionValChecked { get; set; }
public virtual OptionValue OptionValue { get; set; }
public virtual ConfigurationCollection ConfigurationCollection { get; set; }
}
控制器
public ActionResult Create(int LsystemID)
{
var model = new ConfigurationCollection
{
LsystemID = LsystemID,
Lsystem = db.Lsystem.FirstOrDefault(x => x.LsystemID == LsystemID),
OptionValues=new List<OptionValue>()
};
return View(model);
}
我不确定控制器中应该写什么。我可以在我的视图中填充OptionValues
。我只是遗漏了一些可以将数据保存到数据库中的东西。
更新:创建后期操作方法
public ActionResult Create(ConfigurationCollection con)
{
foreach(var item in con.OptionValues)
{
if(item.OptionValueChecked)
db.Config_OptionVal.Add(item);
}
db.ConfigurationCollection.Add(con);
db.SaveChanges();
}
更新:查看
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.LabelFor(model => model.CollectionName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.CollectionName, new { htmlAttributes = new { @class = "form-control" } })
<table class="table">
<tr style="column-width:20px">
<th>Option</th>
<th>Option value</th>
</tr>
@foreach (var item in Model.Lsystem.Options)
{
<tr>
<td><b>@item.OptionName</b></td>
<td>
@foreach (var ov in item.OptionValues)
{
<input type="checkbox" id="OptionValues"/>@ov.OptionVal
}
</td>
</tr>
}
</table>
<input type="submit" value="Create" class="btn btn-default" />
}
答案 0 :(得分:1)
在您的情况下,第三个表不是强制性的。
public class ConfigurationCollection
{
public int ConfigurationCollectionID { get; set; }
public string CollectionName { get; set; }
public virtual ICollection<OptionValue> OptionValues { get; set; }
}
public class OptionValue
{
public int OptionValueID { get; set; }
public string OptionVal { get; set; }
public virtual ICollection<ConfigurationCollection> ConfigurationCollections { get; set; }
}
EF将识别n-m关系。
在Create方法中,您正在向Controller发送ConfigurationCollection
对象,对吧?因此,您只需将对象插入DbSet
即可。像这样:
public ActionResult Create(ConfigurationCollection con)
{
db.ConfigurationCollection.Add(con);
//all of the OptionValues inside the 'con' object will be automatically inserted
db.SaveChanges();
}
修改强>
public ActionResult Create(ConfigurationCollection con, int[] optionsValuesIds)
{
db.ConfigurationCollection.Add(con);
foreach (optionValueId in optionsValuesIds)
{
//if you are using the 'third class'
Config_OptionVal cnfOpt = new Config_OptionVal();
cnfOpt.ConfigurationCollection = con;
cnfOpt.OptionValueID = optionValueId;
db.Config_OptionVal.Add(cnfOpt);
//if you are NOT using the 'third class'
OptionValue optVal = db.OptionValues.Find(optionsValuesIds);
con.OptionValues.Add(optVal);
}
db.SaveChanges();
}
查看:
<input type="checkbox" name="OptionValuesIds" value="@ov.OptionValueID" id="OptionValues"/>@ov.OptionVal
型号:
如果您使用的是第三课&#39;,请按以下步骤修改课程:
public class ConfigurationCollection
{
//...
//public virtual ICollection<OptionValue> OptionValues { get; set; }
public virtual ICollection<Config_OptionVal> OptionValues { get; set; }
}
public class OptionValue
{
//...
//public virtual ICollection<ConfigurationCollection> ConfigurationCollections { get; set; }
public virtual ICollection<Config_OptionVal> ConfigurationCollections { get; set; }
}
如果您没有使用&#39;第三课&#39;:
public class ConfigurationCollection
{
//...
public virtual ICollection<OptionValue> OptionValues { get; set; }
}
public class OptionValue
{
//...
public virtual ICollection<ConfigurationCollection> ConfigurationCollections { get; set; }
}