Entity Framework Core 2 – Owned types


Entity Framework Core 2 was released on August 14th. It brought new features.

On this article I will explain one of them : Owned types

They existed in previous versions of Entity Framework under the name of “complex types” and then disappeared from Entity Framework Core 1
It is a grouping of fields of the same SQL table in a type belonging to the entity corresponding to the same SQL table.

Example, we want to group in table Person properties : FirstName, MiddleName, LastName under a subtype named Name:



This table will be mapped like this:

public class Person
   public int BusinessEntityID { get; set; }
   public Name Name { get; set; }

public class Name
   public string FirstName { get; set; }
   public string MiddleName { get; set; }
   public string LastName { get; set; }

Configuration required:

You must declared in the primary entity Person a key, then you have to map your properties FirstName, MiddleName, LastName to the subtype Name.


public class PersonConfiguration : IEntityTypeConfiguration<Person>
   public void Configure(EntityTypeBuilder<Person> builder)
      builder.HasKey(x => x.BusinessEntityID);
      builder.OwnsOne(x => x.Name).Property(c=> c.FirstName).HasColumnName("FirstName");
      builder.OwnsOne(x => x.Name).Property(c => c.MiddleName).HasColumnName("MiddleName");
      builder.OwnsOne(x => x.Name).Property(c => c.LastName).HasColumnName("LastName");
      builder.ToTable("Person", "Person");

So Person owns Name




Glad to see this feature come back? 🙂