我有一個業務對象,說一個User
。 A User
有一個PhoneNumber
字段,它由一個字符串表示。我出於最好的理由創建了一個PhoneNumber
類,它隱含於/來自字符串運算符。我是否必須做任何特別的事情才能讓PhoneNumber
寫成數據庫的字符串?目前,Entity已決定將我的PhoneNumber
課程分爲幾個組成部分(AreaCode
,Prefix
等),並將其分別保存到數據庫中。 PhoneNumber
存儲在一個單獨的程序集中。在實體POCO中使用自定義數據類型?
public class PhoneNumber : IEquatable<PhoneNumber>, IComparable<PhoneNumber>
{
public static implicit operator string (PhoneNumber ph)
{
return ph.ToString();
}
public static implicit operator PhoneNumber (string number)
{
return Parse(number);
}
public static PhoneNumber Parse(string number)
{
// ...
}
public override string ToString()
{
// produce a Parse-compatible output
}
}
public class User
{
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
public virtual PhoneNumber Phone { get; set; }
}
public class MyContext : DbContext
{
public DbSet<User> Users { get; set; }
}
的EntityFramework正常工作把你的實體類和將每個屬性表示爲列。 PhoneNumber類是否是部分的,如果是這樣的話,您可以在PhoneNumber類的非生成部分中覆蓋您的ToString()。這樣,無論它如何存儲在數據庫中,對象可以爲您提供這些信息都無關緊要。 –
它不是一個部分類,但該對象覆蓋了ToString()併產生了我期望的結果。我會更新一些示例代碼。 –
好吧,所以我想這個問題是,爲什麼你想要存儲爲一個字符串,而不是實體表示形式的電話號碼。 EF總是會將屬性轉換爲列或屬性,具體取決於您是否先執行代碼。 –