C# 为什么在保存转换后的邮件地址时,我的数据库中有空值?

C# 为什么在保存转换后的邮件地址时,我的数据库中有空值?,c#,entity-framework,entity-framework-core,razor-pages,C#,Entity Framework,Entity Framework Core,Razor Pages,遵循代码优先的方法,我创建了一个模型“User”,它包含一个属性mail address和一个字符串“Name”。当我尝试保存记录时,邮件地址总是空的 由于没有MailAddressSQL数据类型,我在fluent API中使用HasConversion将MailAddress转换为字符串,但在我的数据库中它仍然为null public class User { public int ID {get; set; } public String Name {get; set; } pu

遵循代码优先的方法,我创建了一个模型“User”,它包含一个属性mail address和一个字符串“Name”。当我尝试保存记录时,邮件地址总是空的

由于没有MailAddressSQL数据类型,我在fluent API中使用HasConversion将MailAddress转换为字符串,但在我的数据库中它仍然为null

public class User {
  public int ID {get; set; }
  public String Name {get; set; }
  public MailAddress MailAddress {get; set;}
}

public ExampleDbContext : DbContext {
  DbSet<User> Users {get; set; }
  protected override void OnModelCreating(ModelBuilder modelBuilde) {
    modelBuilder.Entity<User>()
    .Property(e => e.MailAddress)
    .HasConversion(
    v => v.ToString(),
    v => new MailAddress(v));
  }
}
公共类用户{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共邮件地址邮件地址{get;set;}
}
公共示例DbContext:DbContext{
DbSet用户{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder modelBuilde){
modelBuilder.Entity()
.Property(e=>e.MailAddress)
.哈斯转换(
v=>v.ToString(),
v=>新邮件地址(v));
}
}
编辑:我被要求分享的添加代码的实体(或者至少是该类的摘录)。顺便说一句,自从我添加了一个scaffold项(选项:“Razor pages using entity framework(CRUD)”)以来,这部分代码已经自动实现了:

公共类CreateModel:PageModel{
[BindProperty]
公共用户{get;set;}
公共异步任务OnPostAsync()
{
如果(!ModelState.IsValid)
{
返回页();
}
_context.Users.Add(用户);
wait_context.SaveChangesAsync();
返回页首(“/索引”);
}
}

非常感谢,伙计们。

还没有测试过这一点,但只是想做一些类似的事情:

public class User
{
    public int ID { get; set; }
    public string Name { get; set; }
    [Column("MailAddress")]
    public string MailAddressStr
    {
        get
        {
            return MailAddress?.ToString();
        }
        set
        {
            MailAddress = new MailAddress(value);
        }
    }


    [NotMapped]
    public MailAddress MailAddress { get; set; }
}
而且您不再需要重写
OnModelCreating(modelbuildermodelbuilder)
方法


让我知道进展如何

请提供“请共享您的实体添加代码”。@MuhammadHannan我希望我添加的代码就是您所指的代码to@DanielA.White谢谢,我阅读了这篇文章,并希望编辑改进了我的问题,因为它的完整性。当你调用
.Add
时,
用户在哪里定义?嘿,非常感谢。这很好,尽管当值转换可以集中在OnModelCreating方法中时,添加一个额外的属性感觉有点粗略。你能想想为什么我试过的方法不起作用吗?(别担心,如果我和其他任何人都不能想出更好的解决方案,我当然会接受这个答案:)我不太确定我是否诚实,如果我发现了什么,我会告诉你,因为我肯定很好奇!
public class User
{
    public int ID { get; set; }
    public string Name { get; set; }
    [Column("MailAddress")]
    public string MailAddressStr
    {
        get
        {
            return MailAddress?.ToString();
        }
        set
        {
            MailAddress = new MailAddress(value);
        }
    }


    [NotMapped]
    public MailAddress MailAddress { get; set; }
}