Entity Framework - повторно использовать сложный тип - PullRequest
6 голосов
/ 29 марта 2012

У меня есть Entity in Code First Entity Framework, который в настоящее время выглядит следующим образом:

public class Entity
{
    // snip ...

    public string OriginalDepartment { get; set; }
    public string OriginalQueue { get; set; }

    public string CurrentDepartment { get; set; }
    public string CurrentQueue { get; set; }
}

Я хотел бы создать сложный тип для этих типов примерно так:

public class Location
{
    public string Department { get; set; }
    public string Queue { get; set; }
}

Я хотел бы использовать один и тот же тип для текущего и оригинального:

public Location Original { get; set; }
public Location Current { get; set; }

Возможно ли это, или мне нужно создать два сложных типа CurrentLocation и OriginalLocation?

public class OriginalLocation
{
    public string Department { get; set; }
    public string Queue { get; set; }
}

public class CurrentLocation
{
     public string Department { get; set; }
     public string Queue { get; set; }
}

1 Ответ

8 голосов
/ 29 марта 2012

Поддерживается из коробки, вам не нужно создавать два сложных типа.

Вы также можете явно настроить свои сложные типы с помощью построителя моделей

modelBuilder.ComplexType<Location>();

Чтобы настроить имена столбцов, вы должны настроить их из конфигурации родительского объекта

public class Location
{
    public string Department { get; set; }
    public string Queue { get; set; }
}

public class MyEntity
{
    public int Id { get; set; }
    public Location Original { get; set; }
    public Location Current { get; set; }
}

public class MyDbContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.ComplexType<Location>();

        modelBuilder.Entity<MyEntity>().Property(x => x.Current.Queue).HasColumnName("myCustomColumnName");
    }
}

карта MyEntity.Current.Queue в myCustomName столбец

...