2011-03-16 3 views
11

J'ai un schéma de base de données héritée mal écrit avec lequel je travaille via EF Code First. Je suis en train de mapper des entités POCO et je voudrais créer un type complexe "Adresse" et l'utiliser partout où les informations d'adresse sont stockées. Malheureusement, tous les champs d'adresse n'ont pas le même nom dans la base de données (par exemple, une table peut avoir "Address1" alors qu'une autre table aura "Street1", même s'ils font référence à la même chose.)Entity framework 4 - mappage de type complexe personnalisé

?. pour créer mappings personnalisés pour un type complexe basé sur une entité donnée Qu'est-ce que la cartographie ressemble

+1

ne pas utiliser CTP5 Installez une nouvelle version appelée 4.1 RC - http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2dc5ddac-5a96-48b2-878d-b9f49d87569a&displaylang=en –

+0

Je pensais que CTP5 était le "final"? Est-ce que la nouvelle version corrige ce problème? –

+0

Non, les CTP ne sont jamais considérés comme une version finale. Cela dit, EF 4.1 RC semble être une version de correction de bug plus qu'un changement fondamental sur CTP5. –

Répondre

14

Oui, vous pouvez y parvenir avec l'API couramment Voici un exemple:

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

pour rester entièrement dans FluentAPI, vous devez supprimer l'annotation ComplexType et utiliser modelBuilder.ComplexType

(); MISE À JOUR: vient de soumettre une modification pour faire exactement cela car il s'agit d'un ancien poste .... il est en attente –

Questions connexes