C# 模型中的Asp.net核心列表

C# 模型中的Asp.net核心列表,c#,entity-framework,enums,asp.net-core,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 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 };
将我原来的Ferrata类更改为Ferrata困难列表后,程序将编译,但存在两个问题: *即使在我的数据库初始值设定项中,我在调试代码时初始化了这些困难,但它们似乎是空的 *当我试图通过应用程序删除数据库条目时,出现以下错误:

SqlException:DELETE语句与引用约束FK_FerrataDifficulity_Ferrata_FerrataID冲突。冲突发生在数据库ViaFerrata1表dbo.FerrataDifficulity列'FerrataID'中


如果有人能指出我做错了什么,以及在asp.net core的模型中包含枚举列表的最佳实践是什么,我将不胜感激。

我使用枚举标志解决了这个问题:

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

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

您提供的代码没有问题。您需要发布实际导致错误的代码。你还需要告诉我们你到底想做什么。你不能使用实体,因为只有带有的类才能是实体。使它成为一个具有Id的类,或者使用shadow属性和属性来解决困难,然后映射它。或者将枚举作为一个标志,并将其用作非集合属性公共难度{get;set;}如果要存储多个ITI,则需要将枚举类型作为字符串提供,但最好使用带有公共字符串常量的静态类,或者为枚举指定int、short、string等类型。。。etc并允许其根据需要进行转换,因为您应该将其视为自定义类型,而不是自动内置类型考虑运算符。@Tseng您说得对,需要成为一个实体,因此需要它自己的类和ID属性。因为这样做似乎有点过分,所以我继续使用enum标志。我现在将更新我的帖子以反映这一变化。
[Flags]
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public enum Difficulty
{
    F = 1,
    PD = 2,
    AD = 4,
    D = 8,
    TD = 16,
    ED = 32
};