2011-03-24 24 views
3

我成功地映射我的複雜類型是這樣的:EF CF:複雜類型的遺留數據庫

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

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

到目前爲止好。但請注意,我們沒有指定任何實體類型。如果我們想要爲具有列「firstN」和「lastN」的表映射相同的Complext類型,該怎麼辦?我試過EntityTypeConfiguration <>,但不允許你在那裏指定複雜的類型。最後,它看起來像complexTypes是全局定義的。

回答

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

並將所得的模式將是:

enter image description here

Here可以再找一個例子。

+0

明白了。現在它是有道理的。非常感謝你。 – mynkow 2011-03-24 16:39:11