3

データベースの文字リテラルTおよびFをブール値として使用するレガシーなOracleデータベースで作業していますが、Entityプロパティに適切なboolen値を反映させたいインサートは重要ではありませんので、データベースだけを読まれるモデルは、それが結合され、この値を変換するWYがあるデータベースの文字列からbooleanプロパティへの変換Entity Framework 4.1

答えて

2
私はラップやこの種の機能を追加するために生成タイプを拡張することをお勧め

...

エンティティフレームワークは、基本的にデータベーステーブルのデータがどのように見えるかを示すオブジェクトを生成します。「連絡先」というテーブルがある場合は、「連絡先」というオブジェクトを取得します。インク、それは何かなどを生成して(私が間違っている可能性が)クラスは、部分として定義されている...

public partial class Contact { 
    string BoolReally { 
    get; set; 
    }; 
} 

あなたは、このような新しいプロパティを追加...今

public partial class Contact { 
    bool MyBool get { 
    return (legacyValue == "T") ? true : false; 
    } 
} 

ますContactインスタンスを宣言するだけで、代わりに "MyBool"から値を取得できます。

...包む、拡張だ

はこのような何か...

public class MyContact { 
    public Contact Contact; 
    public bool MyBool { 
     get { 
      return Contact.BoolAsString; 
     } 
    } 
} 

似たものになるでしょう...ただ少し異なる:)

+2

これの欠点は、 'MyBool'プロパティはEF以来、LINQクエリで使用することができないということですそのようなクエリをSQLに変換することはできません。 – Steven

+0

古い文字列プロパティのlinqクエリで同じロジックを使用することは何も止めません。しかし、厄介な回避策のビット。私の理想はDBの計算フィールドを作成するので、Linqで使用できるPOCO /エンティティに変換されたビット列が得られます。 – War

+0

またはちょうどいくつかのSQL更新(テーブルに1、データをビット列にコピーするために1)で列を変換します。 – War

5

オブジェクトを消費する必要があります不可能です。あなたは、データベース表の列に文字列プロパティをマッピングして、マッピングされていないブール型プロパティを使用する必要があります:

public string MyStringProperty { get; set; } 

[NotMapped] 
public bool MyBoolProperty 
{ 
    get { return MyStringProperty == "T"; } 
    set { MyStringProperty = value ? "T" : "F"; } 
} 
+2

私は流暢なAPIを使ってプロパティマップでこれを行う方法があれば、データベースへのマッピングに無知なモデルPOCOを維持したいと本当に思っていました –

+3

@Chris:ADO.NETチームに教えてください。彼らは単純な型マッピングの必要性を無視しています。 –

+0

ya ive気づいた –

関連する問題