簡體   English   中英

Asp.net核心列表 <enum> 在模型中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM