EF CF: сложные типы для устаревшей базы данных - PullRequest
3 голосов
/ 24 марта 2011

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

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

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

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

1 Ответ

5 голосов
/ 24 марта 2011

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

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");
    }
}

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

enter image description here

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

...