c# - Entity Framework 代码优先将类型保存为字符串

标签 c# entity-framework-4.1

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

public class Person 
{
 public MailAddress Email { get; set; }
}

当 EF 尝试创建数据库时出现此错误

"Problem in mapping fragments starting at line 6 No mapping for properties Person.Email"

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

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

最佳答案

一种可能的方法是让 MailAddress 属性不映射到数据库,但有第二个属性。像这样的东西:

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

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

有关 [NotMapped] 属性的信息,请参见此处:How not persist property EF4 code first?

关于c# - Entity Framework 代码优先将类型保存为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11567167/

相关文章:

c# - 在保存到数据库方法之后,存储库模式应该如何更新对象的 ID?

c# - 使用 MvvmCross 添加 Windows 8.1 Store 基本页面(不再继承自不存在的 LayoutAware 而是基类 Page 类)

entity-framework - Entity Framework 4.1Code 首先连接到Sql Server 2005

entity-framework-4.1 - Entity Framework 4.1代码优先的命令超时

sql - 传递到字典中的模型项的类型为“System.Data.Entity.DynamicProxies.Object”

c# - MVC 5 中的加密

c# - 如何仅使用声明(接口(interface))对应用程序进行建模?

c# - 如何序列化\反序列化属性名称依赖于数据的属性

c# - EF 代码优先 : Where can I find the SavingChanges Event?

asp.net-mvc - 如何从 PropertyInfo 或 MetaData 检测 [NotMapped] 注释?