2011-03-16 122 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