0

J'essaie de modéliser mon modèle de domaine à l'aide du cadre d'entité. Un exemple est la classe Page contenant une classe Content.Problèmes de mappage des relations de composition à l'aide d'Entity Framework

public class Page 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Content PageContent { get; set; } 
} 

public class Content 
{ 
    public IList<Version> Versions { get; private set; } 


    public Version GetLatestPublishedVersion() 
    { 
     //Some biz logic to get the latest published version 
    } 


    public Version GetLatestDraftVersion() 
    { 
    //Some biz logic to get the latest draft version 
    } 

    public void AddVersion() {} 

    public void DeleteVersion() {} 
    .... 

} 

Le modèle de base de données ne dispose pas d'une table pour le contenu, en fait la relation de table est:

Pages Table 
---------- 
Id 
Name 


Versions Table 
-------------- 
Id 
PageId FK PAGES.ID 
Title 
Body 

Comment puis-je modéliser la classe de contenu dans le modèle conceptuel? J'ai essayé d'utiliser un type complexe, mais il ne contient que des propriétés scalaires. J'ai essayé d'utiliser un type d'entité, mais j'ai reçu un message qui dit essentiellement mettre en place une table dans la base de données pour la classe Content, pourquoi?

Je ne pense pas que le modèle de domaine est erroné, il a été conçu comme ceci afin que les soucis de publication ne soient pas sur la classe Page. Encapsulation typique au travail ici.

Est-ce que quelqu'un d'autre a rencontré ce problème?

Répondre

0

votre entité (conceptuelle) doit correspondre assez étroitement le schéma de DB, puis vous projet sur votre classe de contenu:

var q = from p in Context.PageEntities // PageEntity is different than Page 
     where p.id == id 
     select new Page 
     { 
      Id = p.Id, 
      Name = p.Name, 
      Content = new Content 
         { 
          Versions = from v in p.Versions 
            select new Version 
            { 
             Id = v.Id, 
             Body = v.Body, // etc. 
            } 
         } 
     }; 

Cela permet à votre modèle de données et modèle de publication évoluent indépendamment. Vous avez seulement besoin de changer la projection.

+0

Pourquoi l'entité conceptuelle doit-elle correspondre étroitement au schéma de base de données? Le point de séparer des modèles conceptuels et physiques est que le modèle physique peut être très différent pour répondre aux besoins de performance et d'espace du magasin sous-jacent. –

+0

Ce n'est pas tant que * le * doit correspondre au schéma de la base de données car il doit être plus proche du schéma de la base de données que le modèle de présentation. C'est OK si votre modèle EF dépend de votre schéma de base de données. Ce n'est pas OK si votre modèle EF dépend de vos vues Web. –

Questions connexes