为什么在保存转换后的邮件地址时我的数据库中有空值?
Why is there a null in my database when saving a converted mail address?
按照代码优先的方法,我创建了一个模型 'User',其中包含一个属性邮件地址和一个字符串 'Name'。当我尝试保存记录时,邮件地址始终为空。
由于没有MailAddressSQL数据类型,我在fluentAPI中使用了HasConversion将MailAddress转成String,但在我的数据库中还是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));
}
}
编辑:我被要求分享实体添加代码(或至少是 class 的摘录)。顺便说一下,自从我添加了一个脚手架项(选项:'Razor pages using entity framework (CRUD)')后,这部分代码已经自动实现了:
public class CreateModel : PageModel {
[BindProperty]
public User User { get; set; }
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_context.Users.Add(User);
await _context.SaveChangesAsync();
return RedirectToPage("./Index");
}
}
非常感谢,伙计们。
还没有测试过,只是想做这样的事情:
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(ModelBuilder modelBuilder)
方法。
让我知道进展如何!
按照代码优先的方法,我创建了一个模型 'User',其中包含一个属性邮件地址和一个字符串 'Name'。当我尝试保存记录时,邮件地址始终为空。
由于没有MailAddressSQL数据类型,我在fluentAPI中使用了HasConversion将MailAddress转成String,但在我的数据库中还是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));
}
}
编辑:我被要求分享实体添加代码(或至少是 class 的摘录)。顺便说一下,自从我添加了一个脚手架项(选项:'Razor pages using entity framework (CRUD)')后,这部分代码已经自动实现了:
public class CreateModel : PageModel {
[BindProperty]
public User User { get; set; }
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_context.Users.Add(User);
await _context.SaveChangesAsync();
return RedirectToPage("./Index");
}
}
非常感谢,伙计们。
还没有测试过,只是想做这样的事情:
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(ModelBuilder modelBuilder)
方法。
让我知道进展如何!