2017-08-21 11 views
0

私はモデルに列挙型のリストを含めることを試みていますが、いくつかの問題に遭遇しています。私の最初のアプローチでは、私はこれを試してみました:Asp.netコアリスト<enum> inモデル

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.

インターネット上でいくつかのアドバイスの後、私はしかしそこに、プログラムのコンパイルFerrataDifficultyのリストを取るために私のオリジナルフェラークラスを変更した後

public class FerrataDifficulty 
{ 
    public int ID { get; set; } 
    public Difficulty Difficulty { get; set; } 

    public FerrataDifficulty(Difficulty difficulty) 
    { 
     Difficulty = difficulty; 
    } 
} 

:このように私の列挙値を保持するためのスタンドアロンのクラスを作成しました 私のデータベースの初期化子で、私は困難を初期化するにもかかわらず、私は、コードをデバッグするとき*彼らは nullのように見える*私は、アプリケーションを介してデータベースエントリを削除しようとすると、私は次のエラーを取得:

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コアのモデルに列挙型のリストを含めることでベストプラクティスを教えていただければ幸いです。

+1

提供したコードに問題はありません。実際にエラーを引き起こすコードを投稿する必要があります。まさにあなたがしようとしていることを教えてください。 – Guy

+0

エンティティを持つクラスしか存在しないため、「難しさ」エンティティは使用できません。 Idを持つクラス(またはshadowプロパティを使用するクラス)と難易度のプロパティを作成し、マップします。または、enumをフラグとして返し、非コレクションプロパティとして使用します。 'public Difficulty Difficulty {get;セット; } '複数の文字列を格納したい場合は – Tseng

+0

難易度enumが文字列の場合はenum型を指定する必要がありますが、パブリック文字列定数で静的クラスを使用するか、enum型にint型、short型、string型...など)、自動組み込みタイプではなくカスタムタイプと考えるべきであるため、必要に応じてコンバーチブルにすることができます –

答えて

0

私は列挙型のフラグを使用して問題を解決するために管理:

[フラグ] [JsonConverter(typeof演算(Newtonsoft.Json.Converters.StringEnumConverter))]

public enum Difficulty 
{ 
    F = 1, 
    PD = 2, 
    AD = 4, 
    D = 8, 
    TD = 16, 
    ED = 32 
}; 

これがあると思われます私が必要とするものを正確に達成する最も簡単な方法です。