C#中的实体和N层体系结构

aca*_*dia 5 c# n-tier-architecture

我有三个表,如下所示

Emp
----
empID int 
empName
deptID


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

empDocuments
--------------
docID
empID
docName
docType
Run Code Online (Sandbox Code Playgroud)

我正在创建一个实体类,以便我可以使用n层架构在C#中进行数据库事务等.我开始创建类,如下所示

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

    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是empDetails和empDocuments与empID有关.我如何在我的emp类中拥有它们.

如果你能指导我一个例子,我将不胜感激.

谢谢

Wil*_*ler 1

包含外键的表通常表示更大实体的详细信息。

EmpDetailsEmpDocuments代表更大实体的不同细节级别Emp

由于每个Emp实例可能有许多文档和许多详细信息,因此您的详细信息表应作为类中的列表进行收集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;
}
Run Code Online (Sandbox Code Playgroud)

使用NHibernate,您可以根本不关心数据库关系模型,并让该工具使用类SchemaExportTool图通过 XML 映射文件自动生成数据库关系模式(请点击此链接查看概述)。

NHibernate 有多个插件(如果我们可以这样称呼它们的话),例如Fluent NHibernate (FNH)Linq to NHibernate

以下是一些有用的链接,可帮助您熟悉它:

  1. NHibernate 参考文档
  2. 基本 O/R 映射
  3. ISessionFactory配置
  4. 说到架构:NHibernate 架构
  5. 集合映射--> 对于在实体类中映射两个empDetailempDocument集合非常有用emp
  6. 一个不错的教程

使用 NHibernate 的一些优点:

  1. 再也不用为设计关系模型而烦恼了;
  2. 不用担心底层数据存储,NHibernate 通过简单的 XML 配置文件支持多种数据库引擎(无需为任何底层数据库重新编译应用程序);
  3. 一旦您掌握了 NHibernate,您的开发能力就可以轻松地从 25% 提高到 50% 甚至更多;

另外,还有我经常与 NHibernate 结合使用的Microsoft Enterprise Library,或者根据项目,我可能更喜欢仅将 EntLib 与不同的应用程序块一起使用:

  1. 数据访问应用程序块
  2. 异常处理应用程序块
  3. 记录应用程序块
  4. 安全应用程序块
  5. Unity应用程序块

我可能会忘记其他一些......