我是MVC的新手,我很難弄清楚我如何在模型中擁有一個集合(枚舉)。如何正確建立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不同的列表。
在控制器上,我使用Platform Ids作爲鍵和布爾值填充字典。
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);
}
視圖只是爲每個鍵 - 值對生成一個複選框。
在調試模式下,我看到該字典已正確列舉,因此用戶如何選擇HttpPost
上的複選框。 但是,這個字典不是「保存」到數據庫中,當我嘗試訪問SupportedPlatforms
post方法外的其他地方時,它會爲我返回null。
當我看看服務器瀏覽器時,我甚至沒有看到API表的SupportedPlatforms列。
這是實體框架如何工作(枚舉不保存到數據庫)?
如果是這種情況,建模布爾類似的列表/地圖的最佳方法是什麼?
在此先感謝。
編輯:
我只是想更清晰一點的問題:
我將如何在上述情況下的實體模型?
在數據庫中,我應該有一個可擴展的平臺數量,平臺不應直接與API相關。
但是,任何API都可以有多個支持平臺的列表,從而創建一對多關係。
再次感謝。
實體框架模型類決不能直接用作ViewModel對象。 – Dai
您應該使用具有屬性'List SupportedPlatforms'的視圖模型,其中'PlatformViewModel'包含屬性'int ID'和'bool IsSelected'。你的數據庫需要一個關係表 - 包含APIId(FK到API表)和PlatformId(FK到平臺表) –
@StephenMuecke你好斯蒂芬,我已經添加了一個編輯原始問題後,你指出最大一部分。 什麼是創建這種關係的最佳方式,其中一個APIId可以具有多個PlatformId? – JTY