2012-01-15 1 views
1

私はEFコードファーストを使用していて、TelephoneNumber型のTelephoneプロパティを持つエンティティを持っています。 PhoneNumberクラスにはいくつかの検証メソッドと便利メソッドがありますが、基本的に正しい電話番号の文字列を保持しています。Entity Frameworkで1つの値だけを持つ複合型を格納する方法は?

これを単純な文字列としてデータベースに保持します。私はこれについてどうやって行くのですか?

何らかの種類のコンバータを登録する必要がありますか、複雑な型として使用されるPhoneNumberクラスに公開プロパティを公開する必要がありますか(私はこのようなパブリックプロパティを持っていません。 PhoneNumberが不変であることを希望します)。

これは私のPhoneNumberクラスです:

public class PhoneNumber { 
    private string _number; 

    public PhoneNumber(string number) { 
     if (!IsValid(number)) { 
     throw new ArgumentException("Invalid Dutch phone number."); 
     } 

     _number = number; 
    } 

    private static string Sanitize(string number) { 
     return number.Trim() 
     .Replace("-", String.Empty) 
     .Replace(" ", String.Empty); 
    } 

    public bool IsValid() { 
     return IsValid(this); 
    } 

    public static bool IsValid(string number) { 
     if (number == null) { 
     return false; 
     } 

     var cleanNumber = Sanitize(number); 
     return Regex.IsMatch(cleanNumber, @"^06\d{8}$"); 
    } 

    public static implicit operator PhoneNumber(string number) { 
     return new PhoneNumber(number); 
    } 

    public static implicit operator string(PhoneNumber number) { 
     return number.ToString(); 
    } 
    } 
+0

私は」あなたは永続化したいプロパティに注釈を付けることができるはずですが、その方法はわかりません。たぶんあなたはGoogleを試してください: "エンティティフレームワーク注釈ポコ" –

答えて

1

あなたはあなたのコードにこれを追加する必要があります:

public string Number 
{ 
    get { return _number; } 
    private set { _number = value; } 
} 

private PhoneNumber() {} 

と複合型のようにクラスをマップ:

modelBuilder.ComplexType<PhoneNumber>(); 
関連する問題