2010-07-01 5 views
1

Je voudrais savoir s'il est possible de mapper une relation de base de données de 1 à plusieurs en tant que tableau de primitives sur la classe d'objets parent. Par exemple, dire que j'ai une base de données comme suit:Mappage de collection de chaînes avec Entity Framework ou Linq to SQL

TABLE: PERSON 
    ID - int 

TABLE: PERSON_EMAIL_ADDRESSES 
    PERSON_ID - int 
    EMAIL_ADDRESS - string 

Pour ma classe Person, je voudrais avoir les éléments suivants:

public class Person 
{ 
    public int ID { get; set; } 
    public string[] EmailAddresses { get; set; } 
} 

La valeur par défaut LINQ to SQL & comportement Entity Framework serait pour me donner une classe séparée pour la table PERSON_EMAIL_ADDRESSES, et une collection de ce type sur l'objet Person ... qui est ce que je ne veux pas.

On dirait que cela peut être fait avec NHibernate comme décrit here, mais est-il possible de le faire avec EF ou Linq to SQL?

Merci à l'avance, Wayne

Répondre

1

Si vous voulez une liste de lecture seule, comme votre échantillon NHibernate, vous devriez la carte comme d'habitude, puis projet:

var q = from p in Context.People 
     select new Person // Where this is your Person type above, not a mapped entity type 
     { 
      ID = p.ID, 
      EmailAddresses = from pea in p.EmailAddresses 
          select pea.EmailAddress 
     }; 

Cela fonctionne dans les deux L2S et L2E. Si vous voulez lire-écrire, alors besoin l'ID.

+0

Bonjour Craig. Merci pour l'info. Je ne m'intéresse qu'à une liste en lecture seule, mais j'espérais m'occuper de la complexité via la cartographie et ne pas avoir à m'inquiéter à ce sujet avec d'autres types ou projections. Il semble que l'outil NHibernate puisse faire juste, et j'espérais que L2S et/ou L2E pourraient faire quelque chose de similaire. +1 pour la suggestion si ... – WayneC

Questions connexes