如何使用实体框架核心 3.0 创建必需的拥有类型



我正在努力使用实体框架核心创建一个不可为空/必需的拥有类型。 我正在使用EF Core 3.0来对抗PostgreSQL数据库。

我的价值对象:

public class PersonName
{
public PersonName(string name)
{
this.Name = name;
}
public string Name { get; set; }
}

我的实体:

public class Person
{
public int Id { get; set; }
public virtual PersonName FullName { get; set; }
}

我的实体配置:

public void Configure(EntityTypeBuilder<Person> builder)
{
builder.ToTable(nameof(Person));
builder.HasKey(person => person.Id);
builder.OwnsOne(person => person.FullName, personName =>
{
personName.Property(pn => pn.Name).IsRequired().HasColumnName("FullName");
});
}

值类型属性已成功保存到数据库中的"Person"表中,但尽管我使用的是"IsRequired(("方法,但该列仍可为空。

多谢!

因此,在深入研究同一问题后,修复似乎是升级到 ef core 5(发布时(或手动编辑迁移。请参阅以下 github 问题进行讨论:

https://github.com/dotnet/efcore/issues/12100

使用 EF Core 5 可以执行以下操作:

builder.OwnsOne(x => x.FullName );
builder.Navigation(x => x.FullName ).IsRequired();                

或者简单地说:

[Required]
public virtual PersonName FullName { get; set; }

其来源是EF Core 6 What's New文档,但我认为它也应该与EF Core 5一起使用。

相关内容

  • 没有找到相关文章

最新更新