我想在我的模型中包含一個枚舉列表,但是我遇到了一些問題。在我的第一個方法我試過這樣: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進行任何操作:
System.InvalidOperationException: The property 'Ferrata.Difficulty' could not be mapped, because it is of type 'List' which is not a supported primitive type or a valid entity type. Either explicitly map this property, or ignore it.
繼互聯網上的一些意見,我創建一個獨立的類握着我的枚舉值是這樣的:
public class FerrataDifficulty
{
public int ID { get; set; }
public Difficulty Difficulty { get; set; }
public FerrataDifficulty(Difficulty difficulty)
{
Difficulty = difficulty;
}
}
改變我原來的費拉塔下課後採取FerrataDifficulty的列表中的程序編譯,但有一個再兩個問題: *即使在我的數據庫初始化我初始化的困難,當我調試的代碼,他們似乎是空 *當我試圖通過應用程序,我得到以下錯誤刪除的數據庫條目:
SqlException: The DELETE statement conflicted with the REFERENCE constraint "FK_FerrataDifficulty_Ferrata_FerrataID". The conflict occurred in database "ViaFerrata1", table "dbo.FerrataDifficulty", column 'FerrataID'.
如果有人能指出我做錯了什麼,以及在asp.net核心模型中包含枚舉列表的最佳做法是什麼,我將不勝感激。
您提供的代碼沒有任何問題。您需要發佈實際導致錯誤的代碼。您還需要告訴我們您正在嘗試做什麼。 – Guy
您不能使用「難度」實體,因爲只有具有an的類纔可以是實體。使其成爲具有Id(或使用陰影屬性)和難度屬性的類,然後映射它。或者將enum作爲一個標誌並將其用作非集合屬性'public Difficulty Difficulty {get;組; }'如果你想存儲多個 – Tseng
如果難度枚舉是字符串,你需要提供枚舉類型作爲字符串,但它更好地使用靜態類與公共字符串常量或給枚舉一個類型(int,short,string ...等),並允許它按需轉換,因爲您應該將其視爲自定義類型而不是自動內置類型 –