![](/img/trans.png)
[英]JsonConverter attribute on enum breaks asp.net core model binding
[英]Asp.net Core List<enum> in model
我試圖在我的模型中包含一個枚舉列表,但是我遇到了一些問題。 在我的第一種方法中,我嘗試了以下操作:
public class Ferrata
{
[JsonProperty(PropertyName = "Id")]
public int ID { get; set; }
[JsonProperty(PropertyName = "PlaceName")]
public string Name { get; set; }
[JsonIgnore]
public double Lat { get; set; }
[JsonIgnore]
public double Lon { get; set; }
public string GeoLat { get { return Lat.ToString(); } }
public string GeoLong { get { return Lon.ToString(); } }
public List<Difficulty> Difficulty { get; set; }
}
public enum Difficulty { F, PD, AD, D, TD, ED };
但是,當我嘗試使用ef執行任何操作時,以這種方式使用enum會導致異常:
System.InvalidOperationException:無法映射屬性“ Ferrata.Difficulty”,因為它的類型為“列表”,它不是受支持的原始類型或有效的實體類型。 顯式映射此屬性,或忽略它。
遵循互聯網上的一些建議,我創建了一個獨立的類來保存我的枚舉值,如下所示:
public class FerrataDifficulty
{
public int ID { get; set; }
public Difficulty Difficulty { get; set; }
public FerrataDifficulty(Difficulty difficulty)
{
Difficulty = difficulty;
}
}
將原始Ferrata類更改為FerrataDifficulty列表后,程序會進行編譯,但是存在兩個問題:*即使在數據庫初始化程序中,我在調試代碼時也會初始化困難,它們似乎為空*在嘗試刪除數據庫時通過應用程序輸入以下錯誤:
SqlException:DELETE語句與REFERENCE約束“ FK_FerrataDifficulty_Ferrata_FerrataID”發生沖突。 數據庫“ ViaFerrata1”的表“ dbo.FerrataDifficulty”的列“ FerrataID”中發生了沖突。
如果有人能指出我做錯了什么,以及在asp.net核心中的模型中包含枚舉列表的最佳做法,我將不勝感激。
我設法通過使用枚舉標志解決了這個問題:
[Flags]
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public enum Difficulty
{
F = 1,
PD = 2,
AD = 4,
D = 8,
TD = 16,
ED = 32
};
這似乎是實現我所需要的最簡單的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.