实体框架代码首先将类型保存为字符串

Jiv*_*gie 3 c# entity-framework-4.1

我正在使用Entity Framework Code First,并且有一些像这样的System.Net.Mail.MailAddress类的类.

public class Person 
{
 public MailAddress Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当EF尝试创建数据库时,我收到此错误

"Problem in mapping fragments starting at line 6 No mapping for properties Person.Email"
Run Code Online (Sandbox Code Playgroud)

如何告诉EF只将Email.ToString()的结果保存到数据库,然后我可以创建一个新的MailAddress(stringOfEmail); 在对象上设置值时?

或者我最好只将电子邮件的数据类型更改为字符串并在其他地方处理验证?

Cod*_*ike 6

一种可能的方法是将MailAddress属性映射到DB,但具有第二个属性.就像是:

public class Person
{
    public string EmailString { get; set; }

    [NotMapped]
    public MailAddress Email
    {
        get { return new MailAddress(this.EmailString); }
        set { this.EmailString = value.ToString(); }
    }
}
Run Code Online (Sandbox Code Playgroud)

有关[NotMapped]属性的信息,请参见此处:如何不首先保留属性EF4代码?