我正在尝试在我的模型中包含一个枚举列表,但是我遇到了一些问题。在我的第一个方法中,我尝试了这个:
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核心模型中包含枚举列表的最佳做法,我将不胜感激。
答案 0 :(得分:1)
我设法通过使用枚举标志来解决问题:
[Flags]
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public enum Difficulty
{
F = 1,
PD = 2,
AD = 4,
D = 8,
TD = 16,
ED = 32
};
这似乎是实现我所需要的最简单方法。