EF CF: сложные типы для устаревшей базы данных

Я успешно сопоставил свой сложный тип следующим образом:

modelBuilder
     .ComplexType<Name>()
     .Property(name => name.First)
     .HasColumnName("firstNameColumn");

modelBuilder
     .ComplexType<Name>()
     .Property(name => name.Last)
     .HasColumnName("lastNameColumn");

Все идет нормально. Но обратите внимание, что мы не указываем какой-либо тип сущности. Что, если мы хотим отобразить тот же тип комплекса также и для таблицы со столбцами «firstN» и «lastN»? Я пробовал EntityTypeConfiguration‹>, но там нельзя указывать сложные типы. Наконец, похоже, что сложные типы определены глобально.


person mynkow    schedule 24.03.2011    source источник


Ответы (1)


Вы также можете настроить имена столбцов сложного типа на уровне объекта, например:

public class User
{
    public int UserId { get; set; }
    public Name NameInfo { get; set; }
}

public class Customer
{
    public int CustomerId { get; set; }
    public Name NameInfo { get; set; }
}

[ComplexType]
public class Name
{
    public string First { get; set; }
    public string Last { get; set; }
}

public class Context : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Customer> Customers { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.ComplexType<Name>()
                    .Property(name => name.First)
                    .HasColumnName("firstNameColumn");

        modelBuilder.ComplexType<Name>()
                    .Property(name => name.Last)
                    .HasColumnName("lastNameColumn");

        // Here is how can customize the column names at the entity level:
        modelBuilder.Entity<Customer>().Property(u => u.NameInfo.First)
                                       .HasColumnName("firstN");

        modelBuilder.Entity<Customer>().Property(u => u.NameInfo.Last)
                                       .HasColumnName("lastN");
    }
}

И результирующая схема будет:

введите здесь описание изображения

Здесь вы можете найти другой пример.

person Morteza Manavi    schedule 24.03.2011
comment
Понятно. Теперь это имеет смысл. Большое Вам спасибо. - person mynkow; 24.03.2011