2011-03-16 164 views
11

我通過EF Code First與我一起編寫的遺留數據庫模式寫得很差。我目前正在映射POCO實體,並希望創建一個「地址」複雜類型,並在存儲街道地址信息的任何地方使用此類型。不幸的是,並不是所有的地址字段在數據庫中都被命名爲相同的(即一個表可能具有「Address1」,而另一個表將具有「Street1」,即使它們指向相同的東西。 ??對於基於給定的實體的複雜類型是什麼該映射像創建自定義映射實體框架4 - 自定義複雜類型映射

+1

不要使用CTP5。安裝稱爲4.1 RC的新版本 - http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2dc5ddac-5a96-48b2-878d-b9f49d87569a&displaylang=en – 2011-03-16 08:11:14

+0

我認爲CTP5是「最終」?新版本是否解決了這個問題? – 2011-03-16 15:57:56

+0

不,CTP從未被認爲是最終版本。也就是說,EF 4.1 RC似乎是比CTP5更重要的bug修復版本。 – 2011-03-16 18:42:17

回答

14

是的,你可以做到這一點用流利的API下面是一個例子:

public class User 
{ 
    public int UserId { get; set; } 
    public Address Address { get; set; } 
} 

public class Customer 
{ 
    public int CustomerId { get; set; } 
    public Address Address { get; set; } 
} 

[ComplexType] 
public class Address 
{ 
    public string Street { get; set; }  
    public string City { 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.Entity<User>().Property(u => u.Address.Street) 
            .HasColumnName("UserStreet"); 

     modelBuilder.Entity<Customer>().Property(u => u.Address.Street) 
             .HasColumnName("CustomerStreet");   
    } 
} 
+3

完全保留在FluentAPI中,則應放棄ComplexType註釋並使用modelBuilder.ComplexType

(); 更新:剛剛提交了一個編輯來做到這一點,因爲這是一箇舊的帖子....它正在等待 – 2011-10-12 16:13:26