2010-05-19 34 views
5

Tôi có ba bảng như hình dưới đâyEntity và N-Tier kiến ​​trúc trong C#

Emp 
---- 
empID int 
empName 
deptID 


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

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

tôi đang tạo ra một lớp thực thể vì vậy mà tôi có thể sử dụng kiến ​​trúc n-tier để làm giao dịch cơ sở dữ liệu vv trong C#. Tôi bắt đầu tạo lớp học giống như được hiển thị bên dưới

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

    } 
} 

Câu hỏi của tôi là empDetails và empDocuments liên quan đến emp bởi empID. Làm thế nào để tôi có những người trong lớp học của tôi.

Tôi sẽ đánh giá cao nếu bạn có thể hướng dẫn tôi đến một ví dụ.

Cảm ơn

Trả lời

1

Các bảng chứa khóa ngoại thường đại diện cho chi tiết của thực thể lớn hơn.

Cả hai EmpDetailsEmpDocuments đại diện cho cấp độ chi tiết khác nhau của pháp nhân lớn hơn Emp.

Vì bạn có thể có nhiều tài liệu và nhiều chi tiết cho mỗi cá thể Emp, bảng chi tiết của bạn sẽ được thu thập dưới dạng danh sách bên trong lớp emp của bạn.

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

Sử dụng NHibernate, bạn có thể chỉ đơn giản là không quan tâm đến mô hình quan hệ cơ sở dữ liệu của bạn và có công cụ này tạo ra cơ sở dữ liệu lược đồ quan hệ của bạn sẽ tự động sử dụng SchemaExportTool từ sơ đồ lớp của bạn thông qua file ánh xạ XML (Follow this link for an overview).

Có nhiều plugin, nếu chúng tôi có thể gọi chúng như vậy, với NHibernate chẳng hạn như Fluent NHibernate (FNH), Linq to NHibernate.

Dưới đây là một số liên kết hữu ích mà sẽ giúp bạn làm quen với nó:

  1. NHibernate Reference Documentation
  2. Basic O/R mapping
  3. ISessionFactory Configuration
  4. Nói về kiến ​​trúc: NHibernate Architecture
  5. Collection Mapping -> Khá hữu ích để ánh xạ hai số điện thoại empDetailempDocument của bạn các mục trong lớp học thực thể emp của bạn.
  6. A Nice Tutorial

Một vài ưu điểm của việc sử dụng NHibernate:

  1. Không bao giờ làm phiền thiết kế một mô hình quan hệ một lần nữa;
  2. Đừng bận tâm về kho dữ liệu bên dưới, NHibernate hỗ trợ nhiều công cụ cơ sở dữ liệu bằng tệp cấu hình XML đơn giản (không cần biên dịch lại ứng dụng cho bất kỳ cơ sở dữ liệu cơ sở nào);
  3. Tăng sự phát triển của bạn dễ dàng từ 25% đến 50% hoặc hơn khi bạn làm chủ NHibernate;

Nếu không, đó cũng là Microsoft Enterprise Library mà tôi thường sử dụng kết hợp với NHibernate, hoặc tùy thuộc vào các dự án, tôi có thể thích chỉ sử dụng EntLib với các khối ứng dụng khác nhau:

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

Và tôi có thể quên một số người khác ...

1

Bạn đã chơi với Linq2SQL chưa? Bạn có thể tìm thấy câu trả lời ở đó.

+0

Cảm ơn. Tôi đã làm việc với LinQtoSQL nhưng tôi không thể sử dụng LINQ cho dự án này cho một số chính sách công ty lạ và Cơ sở dữ liệu là oracle. – acadia

+1

Có các khung công tác khác xử lý cơ sở dữ liệu và thực thể, như khung ngủ đông, cận âm, thực thể và vv Bạn có thể đọc một số bài viết về chúng và xem cách chúng xử lý tình huống của bạn. Sau khi tất cả, cuối cùng, bạn sẽ được giải quyết với một số giải pháp giải quyết vấn đề của bạn bằng các khuôn khổ hiện có. – Codism

0

Nếu bạn sử dụng LINQ to Entities, bạn sẽ có thể tạo các thực thể từ nguồn dữ liệu Oracle. Nó dễ dàng hơn nhiều so với việc tự làm chúng.

2

Có ba điều nghiêm túc tốt tôi muốn đề nghị bạn đọc để giúp bạn xuống con đường đúng đắn:

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

Họ đang dựa trên một EF4 giải pháp, nhưng tôi nghĩ rằng chúng vẫn có thể rất phù hợp ngay cả khi bạn không sử dụng EF4 hoặc thậm chí LINQ. Đặc biệt là hai bài báo đầu tiên. Viết rất tốt.

Theo như câu hỏi cụ thể của bạn, có vẻ như bạn sẽ cần phải tạo một lớp thực thể cho empDetails và empDocuments và sau đó giữ một thuộc tính trong emp empDetails loại và một bộ sưu tập (bất kỳ IEnumerable) của empDocuments. Nhưng chắc chắn, bạn có thể sử dụng somesort của khung dựng sẵn để giúp bạn. Tôi nghĩ rằng có thể có một thực thi EF Oracle.