2010-05-19 14 views
5

tengo tres tablas como se muestra abajoEntidad y N-Tier arquitectura en C#

Emp 
---- 
empID int 
empName 
deptID 


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

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

Estoy creando una clase de entidad para que pueda utilizar la arquitectura de n niveles de hacer transacciones de bases de datos, etc en C#. Empecé creando clase para el mismo, como se muestra a continuación

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; } 

    } 
} 

Mi pregunta es la empDetails y empDocuments están relacionados con emp por EMPID. ¿Cómo los tengo en mi clase emp?

Agradecería que me pudieras dar un ejemplo.

Gracias

Respuesta

1

Las tablas que contienen una clave externa normalmente representan detalles de una entidad mayor.

Ambos EmpDetails y EmpDocuments representan un nivel de detalle diferente de su entidad mayor Emp.

Dado que puede tener muchos documentos y muchos detalles para cada instancia de Emp, sus tablas de detalles se recopilarán como una lista dentro de su clase 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; 
} 

Usando NHibernate, usted podría simplemente no se preocupan por su modelo relacional de bases de datos y tener esta herramienta de generar la base de datos esquema relacional de forma automática mediante el SchemaExportTool de su diagrama de clases a través de ficheros de mapeo XML (Follow this link for an overview).

Hay varios complementos, si podemos llamarlos así, a NHibernate como Fluent NHibernate (FNH), Linq to NHibernate.

Éstos son algunos enlaces útiles que se ayudará a familiarizarse con él:

  1. NHibernate Reference Documentation
  2. Basic O/R mapping
  3. ISessionFactory Configuration
  4. Hablando de arquitectura: NHibernate Architecture
  5. Collection Mapping -> Bastante útil para mapear sus dos empDetail y empDocument co reflexiones dentro de su clase de entidad emp.
  6. A Nice Tutorial

Algunas ventajas de usar NHibernate:

  1. Nunca se molestó el diseño de un nuevo modelo relacional;
  2. No te preocupes por el almacén de datos subyacente, NHibernate admite múltiples motores de bases de datos por un simple archivo de configuración XML (no es necesario recompilar la aplicación para ninguna de las bases de datos subyacentes);
  3. Aumente su desarrollo fácilmente del 25% al ​​50% o más una vez que domine NHibernate;

De lo contrario, también hay Microsoft Enterprise Library la que utilizo a menudo en conjunción con NHibernate, o en función de los proyectos, es posible que prefiera utilizar sólo EntLib con los diferentes bloques de aplicación:

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

Y puedo olvidar algunos otros ...

1

¿Ha jugado con Linq2SQL? Puede encontrar su respuesta allí.

+0

Gracias. Trabajé con LinQtoSQL, pero no puedo usar LinQ para este proyecto por alguna política extraña de la compañía y la base de datos es Oracle. – acadia

+1

Existen otros marcos que tratan con bases de datos y entidades, como hibernación, subsónicos, marco de entidades, etc. Puede leer algunos artículos sobre ellos y ver cómo manejan su situación. Después de todo, eventualmente, se establecerá con alguna solución que aborde su problema por los marcos existentes. – Codism

0

Si usa LINQ to Entities, debe poder crear las entidades a partir de un origen de datos Oracle. Es mucho más fácil que hacerlas tú solo.

2

Hay tres buenos artículos serio me gustaría recomendar que lea para ayudarle por el camino correcto:

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

Se basan en un EF4 solución, pero creo que todavía pueden ser muy relevantes, incluso si no está utilizando EF4 o incluso LINQ. Especialmente los primeros dos artículos. Muy bien escrito.

En cuanto a su pregunta específica, parece que tendrá que crear una clase de entidad para empDetails y empDocuments y luego mantener una propiedad en emp de tipo empDetails y una colección (cualquier IEnumerable) de empDocuments. Pero seguramente, puede usar algunos de los framework preconstruidos para ayudarlo. Creo que podría haber una implementación de EF Oracle.

Cuestiones relacionadas