如何正确地为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都可以有多个支持平台的列表,从而创建一对多的关系。

再次感谢。

如何正确地为MVC模型建模布尔标志列表

在这种情况下有两点需要注意。

首先,不要直接使用实体框架模型作为ViewModels。您应该创建一个具有必要属性的新ViewModel,并在其上填充数据。

但是,这个字典没有"保存"到数据库

如果你想把你的数据保存到数据库中,你必须自己做。例如:

using (var context = new MyDbContext())
{
    // Do something with your data here
    // Call SaveChanges() to save your changes to the database.
    context.SaveChanges();
}