2011-07-11 10 views
1

私はすでにテーブルにallow null(SQL Serverで)とマークされているフィールドを持っていて、何らかの理由でこれらのフィールドをC#コードのクラスにマップしたいが、変数をnull不可(離散値)もしdbがnullならば、この変数にはC#のデフォルト値を与えます。例えばヌル可能な列をヌル可能な変数にマップする方法は?

Table Employee (
    ID int Not NULL, 
    Name nvarchar(256) NOT NULL, 
    Age int NULL) 

は今、私はLINQ to SQLは、またはNHibernateのいずれかを使用するには問題がない、のいずれかを行います。この表には、このクラスに

class Employee { 
    public int ID {get; set;} 
    public string Name {get; set;} 
    public int Age {get; set;} 
} 

をマッピングすることにしたいですジョブ。デシベルで年齢フィールドがnullの場合

は、誰もが私にこの

ああのためのソリューションを与えることができ、ところで、私は年齢の変数は、ジャスト(例えば0)

答えて

1

int型のデフォルト値を取りたいですあなたは通常どおりとNULL可能int型で、次を使用して...あなたのlinq2sqlモデルで

if (Age.HasValue) return Age.Value else return 0; 
1

を最初の2つの列をマップするには、年齢フィールドRawAgeに名前を付け、それはプライベート作ることができます。そして、しかし

public int Age { 
    get { RawAge.HasValue ? RawAge.Value : default(int); } 
    set { RawAge.Value = value; } 
    } 

問題として年齢を定義する部分クラスの従業員を作り、あなたが今nullに年齢の値を設定する方法がありませんということです。 intのデフォルト値は、フィールドに有効なnull以外の値であるため、nullにマップすることはできません。

+0

しかし、これはデータベースの各フィールドに2つのプロパティを持たなければならないということです。 –

+0

dbmlコードジェネレータは、あなたのプライベートプロパティを作成します。あなたはちょうど私の答えのような小さなラッパーを書く必要があります。 RawAgeはプライベートなので、コードを使用しても表示されず、Intellisenseには表示されません。技術的には2つのプロパティがありますが、1つしか表示されません。 – hatchet

+0

私はこの解決策を試みましたが、LinacからSQLへのdatacontextは、たとえ私がColumnAttribute、任意のアイデアでそれを飾ってもプライベートメンバーをマッピングすることができませんでしたか? –

関連する問題