2010-05-19 6 views
5

J'ai trois tables comme indiqué ci-dessousArchitecture entité et N-Tier en C#

Emp 
---- 
empID int 
empName 
deptID 


empDetails 
----------- 
empDetailsID int 
empID int 

empDocuments 
-------------- 
docID 
empID 
docName 
docType 

Je crée une classe d'entités pour que je puisse utiliser l'architecture n-tier pour effectuer des transactions de base de données, etc en C#. J'ai commencé à créer la classe pour le même que celui indiqué ci-dessous

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace employee 
{ 
    class emp 
    { 
     private int empID; 
     private string empName; 
     private int deptID; 

     public int EmpID { get; set; } 
     public string EmpName { get; set; } 
     public int deptID { get; set; } 

    } 
} 

Ma question est la empDetails et empDocuments sont liés à emp par EMPID. Comment puis-je avoir ceux dans ma classe emp.

J'apprécierais si vous pouvez me diriger vers un exemple.

Merci

Répondre

1

Les tables qui contiennent une clé étrangère représentent normalement les détails d'une entité supérieure.

Les deux EmpDetails et EmpDocuments représentent un niveau de détail différent de votre entité supérieure Emp.

Étant donné que vous pouvez avoir de nombreux documents et de nombreux détails pour chaque instance Emp, vos tables de détails doivent être rassemblées sous la forme d'une liste dans votre classe emp.

public class emp { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int DepartmentId { get; set; } 
    public IList<empDetail> Details { 
     get { 
      return _details; 
     } 
    } 
    private IList<empDetail> _details; 
    public IList<empDocument> Documents { 
     get { 
      return _documents; 
     } 
    } 
    private IList<empDocument> _documents; 
} 

En utilisant NHibernate, vous pouvez simplement ne se soucient pas de votre base de données modèle relationnel et avoir cet outil génère votre base de données schéma relationnel automatiquement en utilisant le SchemaExportTool de votre diagramme de classes dans les fichiers de mappage XML (Follow this link for an overview).

Il existe plusieurs plugins, si on peut les appeler ainsi, à NHibernate tels que Fluent NHibernate (FNH), Linq to NHibernate.

Voici quelques liens utiles qui vous aiderai à vous familiariser avec elle:

  1. NHibernate Reference Documentation
  2. Basic O/R mapping
  3. ISessionFactory Configuration
  4. En parlant de l'architecture: NHibernate Architecture
  5. Collection Mapping -> Assez utile pour la cartographie de vos deux empDetail et empDocument co sections au sein de votre classe d'entité emp.
  6. A Nice Tutorial

Quelques avantages de l'utilisation de NHibernate:

  1. Ne jamais se concevoir à nouveau pris la peine d'un modèle relationnel; Ne vous souciez pas de la banque de données sous-jacente, NHibernate prend en charge plusieurs moteurs de base de données par un simple fichier de configuration XML (inutile de recompiler l'application pour l'une des bases de données sous-jacentes);
  2. Augmentez facilement votre développement de 25% à 50% ou plus une fois que vous maîtrisez NHibernate;

Sinon, il y a aussi Microsoft Enterprise Library que je l'utilise souvent en conjonction avec NHibernate, ou en fonction des projets, je préfère utiliser uniquement EntLib avec les différents blocs d'application:

  1. Data Access Application Block;
  2. Exception Handling Application Block;
  3. Logging Application Block;
  4. Security Application Block;
  5. Unity Application Block;

Et j'oublier quelques autres ...

1

Avez-vous joué avec Linq2SQL? Vous pouvez trouver votre réponse là-bas.

+0

Merci. J'ai travaillé avec LinQtoSQL mais je ne peux pas utiliser LinQ pour ce projet pour une politique d'entreprise étrange et la base de données étant oracle. – acadia

+1

Il existe d'autres frameworks traitant de base de données et d'entités, comme hibernate, subsonic, framework d'entité, etc. Vous pouvez lire quelques articles à leur sujet et voir comment ils gèrent votre situation. Après tout, vous finirez par vous installer avec une solution qui résoudra votre problème avec les frameworks existants. – Codism

0

Si vous utilisez LINQ to Entities, vous devriez être capable de créer les entités à partir d'une source de données Oracle. C'est beaucoup plus facile que de les faire vous-même.

2

Il y a trois bons articles sérieux je vous recommande de lire pour vous aider sur le chemin droit:

http://msdn.microsoft.com/en-us/magazine/dd882522.aspx

http://msdn.microsoft.com/en-us/magazine/ee321569.aspx

http://msdn.microsoft.com/en-us/magazine/ee335715.aspx

Ils sont basés sur un EF4 solution, mais je pense qu'ils peuvent toujours être très pertinents même si vous n'utilisez pas EF4 ou même LINQ. Surtout les deux premiers articles. Très bien écrit.

En ce qui concerne votre question spécifique, il semblerait que vous deviez créer une classe d'entité pour empDetails et empDocuments, puis détenir une propriété dans emp de type empDetails et une collection (toute IEnumerable) de empDocuments. Mais sûrement, vous pouvez utiliser un cadre prédéfini pour vous aider. Je pense qu'il pourrait y avoir une implémentation EF Oracle.