I have a main entity Profile that has a property Name that is a value object. The Name object has two properties First and Last. When I use the Fluent API to map the Name objects properties to columns within the Profile table I specify that they are required. When I create the migration it says nullable is true. I assume it has to do with the fact that in EF Core 3.0 owned entities are now optional but how do I tell EF that they are actually required?
``` C#
public class Profile
{
public Name Name { get; private set; }
...
}
``` C#
public class Name
{
public string First { get; }
public string Last { get; }
...
}
``` C#
public override void Configure(EntityTypeBuilder
{
base.Configure(builder);
builder.OwnsOne(
navigationExpression: p => p.Name,
buildAction: n =>
{
n.Property(n => n.First)
.HasColumnName("NameFirst")
.HasMaxLength(25)
.IsRequired();
n.Property(n => n.Last)
.HasColumnName("NameLast")
.HasMaxLength(25)
.IsRequired();
});
}
```
EF Core version: 3.0
Database provider: Microsoft.EntityFrameworkCore.SqlServer
Target framework: .NET Core 3.0
Operating system: Windows 10 1903 latest updates
IDE: Visual Studio 2019 16.3.5
I also posted this on stackoverflow:
Any help you can provide would be great.
Take care,
Ken
As of right now it's not possible without manually changing the migration.
Required owned types are tracked by https://github.com/aspnet/EntityFrameworkCore/issues/12100
However value objects would work better if implemented using value converters: https://github.com/aspnet/EntityFrameworkCore/issues/13947
However value objects would work better if implemented using value converters: #13947
Can you provide an example with value converters as value object ?
Can you provide an example with value converters as value object ?
@m4ss1m0g Of course, as soon as it's implemented.
Most helpful comment
@m4ss1m0g Of course, as soon as it's implemented.