如何正确地为MVC模型建模布尔标志列表
本文关键字:建模 布尔 标志 列表 模型 MVC 正确地 | 更新日期: 2023-09-27 18:13:45
我是MVC新手,我很难弄清楚如何在模型内拥有集合(枚举)。
我有一个叫做API的模型:
public class API
{
public int APIId { get; set; }
public int APICategoryId { get; set; }
public virtual APICategory APICategory { get; set; }
public string APIName { get; set; }
...
public Dictionary<int, bool> SupportedPlatforms { get; set; }
}
正如你在上面看到的,我希望每个API都有一个支持的平台列表,每个API可能不同。
在控制器上,我用平台id作为键和布尔值作为值填充字典。
public ActionResult CreateAPI()
{
var model = new API();
model.SupportedPlatforms = new Dictionary<int, bool>();
var platformList = platforms.GetAll();
foreach (Platform p in platformList)
{
if (!model.SupportedPlatforms.ContainsKey(p.PlatformId))
{
model.SupportedPlatforms.Add(p.PlatformId, false);
}
}
return View(model);
}
视图只是为每个键值对生成一个复选框。
在调试模式下,我看到Dictionary根据用户选择HttpPost
上的复选框的方式被正确枚举。然而,这个字典并没有"保存"到数据库,当我试图在post方法之外的其他地方访问SupportedPlatforms
时,它为我返回null。
当我查看Server Explorer时,我甚至没有看到API表的SupportedPlatforms列。
这只是如何实体框架工作(枚举不保存到数据库)?
如果是这种情况,那么建模一个类似的布尔值列表/映射的最佳方法是什么?
提前感谢。
编辑:
我只是想把这个问题弄清楚一点:
我如何在上述情况下对实体建模?
在数据库中,我应该有一个可扩展的平台数量,平台不应该直接与API相关。
然而,任何API都可以有多个支持平台的列表,从而创建一对多的关系。
再次感谢。
在这种情况下有两点需要注意。
首先,不要直接使用实体框架模型作为ViewModels。您应该创建一个具有必要属性的新ViewModel,并在其上填充数据。
但是,这个字典没有"保存"到数据库
如果你想把你的数据保存到数据库中,你必须自己做。例如:
using (var context = new MyDbContext())
{
// Do something with your data here
// Call SaveChanges() to save your changes to the database.
context.SaveChanges();
}