Efcore: How to make an OwnsOne property in EF Core 3.0 required when mapping to SQL Server columns?

Created on 18 Oct 2019  路  4Comments  路  Source: dotnet/efcore

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 builder)
{
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:

https://stackoverflow.com/questions/58417334/how-to-make-an-ownsone-property-in-ef-core-3-0-required-when-mapping-to-sql-serv

Any help you can provide would be great.

Take care,
Ken

closed-duplicate customer-reported

Most helpful comment

Can you provide an example with value converters as value object ?

@m4ss1m0g Of course, as soon as it's implemented.

All 4 comments

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.

Was this page helpful?
0 / 5 - 0 ratings