如何在Entity Framework中存储只有一个值的复杂类型?

时间:2012-01-15 16:55:14

标签: entity-framework

我正在使用EF Code First,并且拥有一个PhoneNumber类型的Telephone属性的实体。 PhoneNumber类有一些验证和便利方法,但基本上包含一个带有正确电话号码的字符串。

我想将它作为一个简单的字符串保存到数据库中。我该怎么做呢?

我是否需要注册某种类型的转换器,或者我是否真的需要在我的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();
    }
  }

1 个答案:

答案 0 :(得分:1)

您必须将此添加到您的代码中:

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

private PhoneNumber() {}

并将您的类映射为复杂类型:

modelBuilder.ComplexType<PhoneNumber>();