3

我成功地映射了我的复杂类型,如下所示:

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

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

到现在为止还挺好。但请注意,我们没有指定任何实体类型。如果我们还想为包含“firstN”和“lastN”列的表映射相同的复杂类型怎么办?我试过 EntityTypeConfiguration<> 但你不能在那里指定复杂的类型。最后,看起来 complexTypes 是全局定义的。

4

1 回答 1

5

您还可以在实体级别自定义复杂类型列名称,如下所示:

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

结果模式将是:

在此处输入图像描述

在这里你可以找到另一个例子。

于 2011-03-24T14:54:43.787 回答