2013-12-20 13 views
7

でサポートされています。列挙型とフラグが原因私のエラーメッセージにormlite servicestack

An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll but was not handled in user code 

Additional information: Conversion failed when converting the nvarchar value 'AB' to data type int. 

私はABの値を持つ列挙型を持っていると私は、整数データ型はnvarcharない値として保存します。 [フラグ]

public enum VisibleDayOfWeek : int 
{ 
    None = 0, 
    Monday = 1, 
    Tuesday = 2, 
    Wednesday = 4, 
    Thursday = 8, 
    Friday = 16, 
    Saturday = 32, 
    Sunday = 64 
} 

私はデシベルで複数の日文字列を保存することはできませんが、私は複数の日を表すフラグ値の合計を保存することができます: 私は旗を持つ列挙型を持っているようなものを属性。

これらの列挙プロパティの周りに整数ラッパーを作成したくありません。

列挙型の基になる型はバイトまたは整数なので、どうしてheckはstring/varcharとして保存されるのですか?それは意味をなさない。エンティティフレームワークであっても、数年後に列挙型サポートが得られました...

この場合の解決策は何ですか?私の知る限りは、次のバージョンを知ってormliteバージョン3のdoesntのサポート列挙型を、知っているようにhttps://github.com/tapmantwo/enumflags

答えて

4

後期の答えが、v4.0.8に [フラグ]属性がServiceStack は常に intとしてemumを扱う作るこれ、列挙型に追加されました。

From v4.0.54あなたも今OrmLiteのintとしてデータベースに列挙型が保存されますが、シリアル化するとき、それは文字列としてそうします[EnumAsInt]属性を使用することができます。

5

はこの男が同じ問題を抱えているようです。どのような方法あなたのソリューションだけでも、

public int VisibleDayOfWeek { get; set; } 

[Ignored] 
public VisibleDayOfWeek VisibleDayOfWeekEnum 
{ 
    get { return (VisibleDayOfWeek)VisibleDayOfWeek; } 
    set { VisibleDayOfWeek = (int)value; } 
} 

がさえ、エンティティフレームワークが

エンティティフレームワークの年後に右にその列挙型のサポートでそれを得た整数ラッパー使用バージョン> 4の後に列挙をサポートしているためにそこにありますormliteはちょうどその名前「lite」のようなものですが、多くのエンティティ・フレームワークには豊富な機能が期待できます。

+1

私の質問で前に述べたように、私は整数ラッパーを望んでいません。そして、多くの部分では、オルミテッドはEFよりも豊かです。 EFには、更新、削除などの部分的な更新または式ベースのAPIはありません。 Ormlite v4はしばらく外に出ています。 – HelloWorld

+1

これは、あなたがormiteが持っていない機能をとっているからです。整数ラッパーやフォークormlite以外のソリューションはありませんし、Enumをサポートするようにしてください。 – kirie

+1

Flagsはすでにバグとして報告されています。今私は、著者がint型ではなく文字列型へのenum値がバグであることを確認するのを待っています。 https://github.com/ServiceStack/ServiceStack.OrmLite/commit/6c4c608443e919aac23b647f97fed1c86d89c52d – HelloWorld

関連する問題