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

时间:2017-08-21 05:08:09

标签: c# entity-framework enums asp.net-core

我正在尝试在我的模型中包含一个枚举列表,但是我遇到了一些问题。在我的第一个方法中,我尝试了这个:

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:属性'Ferrata.Difficulty'   无法映射,因为它的类型为'List'   不是受支持的基本类型或有效的实体类型。或   显式映射此属性,或忽略它。

根据互联网上的一些建议,我创建了一个独立的类来保存我的枚举值:

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核心模型中包含枚举列表的最佳做法,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我设法通过使用枚举标志来解决问题:

[Flags]
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public enum Difficulty
{
    F = 1,
    PD = 2,
    AD = 4,
    D = 8,
    TD = 16,
    ED = 32
};

这似乎是实现我所需要的最简单方法。