Сущность и N-уровневая архитектура в C#

У меня есть три таблицы, как показано ниже

Emp
----
empID int 
empName
deptID


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

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

Я создаю класс сущностей, чтобы я мог использовать 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; }

    }
}

Мой вопрос как empDetails и empDocuments связаны с emp с помощью empID. Как у меня есть те в моем классе emp.

Я был бы признателен, если бы вы могли привести меня к примеру.

Спасибо

4 ответа

Решение

Таблицы, которые содержат внешний ключ, обычно представляют подробности большей сущности.

И то и другое EmpDetails а также EmpDocuments представляют другой уровень детализации вашей большей сущности 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;
}

Используя NHibernate, вы можете просто не заботиться о своей реляционной модели базы данных, и этот инструмент генерирует вашу реляционную схему базы данных автоматически, используя SchemaExportTool из вашей диаграммы классов через файлы сопоставления XML ( перейдите по этой ссылке для обзора).

Есть несколько плагинов, если можно их так назвать, к NHibernate, таких как Fluent NHibernate (FNH), Linq to NHibernate,

Вот несколько полезных ссылок, которые помогут вам ознакомиться с ним:

  1. Справочная документация NHibernate
  2. Основное O/R отображение
  3. Конфигурация ISessionFactory
  4. Говоря об архитектуре: архитектура NHibernate
  5. Коллекция карт -> Довольно полезно для отображения ваших двух empDetail а также empDocument коллекции в вашем emp класс сущности.
  6. Хороший учебник

Несколько преимуществ использования NHibernate:

  1. Никогда не беспокойтесь о разработке реляционной модели снова;
  2. Не беспокойтесь о базовом хранилище данных, NHibernate поддерживает несколько механизмов баз данных с помощью простого XML-файла конфигурации (нет необходимости перекомпилировать приложение для какой-либо из базовых баз данных);
  3. Повысьте уровень своей разработки с 25% до 50% и более, если вы овладеете NHibernate;

В противном случае есть также Microsoft Enterprise Library, которую я часто использую в сочетании с NHibernate, или, в зависимости от проектов, я могу предпочесть использовать EntLib только с различными блоками приложения:

  1. Блок доступа к данным;
  2. Блок обработки исключений;
  3. Блок регистрации приложений;
  4. Блок приложения безопасности;
  5. Unity Application Block;

И я могу забыть некоторые другие...

Есть три очень хорошие статьи, которые я рекомендую вам прочитать, чтобы помочь вам выбрать правильный путь:

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

Они основаны на решении EF4, но я думаю, что они все еще могут быть очень актуальны, даже если вы не используете EF4 или даже LINQ. Особенно первые две статьи. Очень хорошо написано.

Что касается вашего конкретного вопроса, похоже, вам нужно создать класс сущности для empDetails и empDocuments, а затем сохранить свойство в emp типа empDetails и коллекцию (любой IEnumerable) empDocuments. Но, конечно, вы можете использовать какой-то готовый фреймворк, чтобы помочь вам. Я думаю, что может быть реализация EF Oracle.

Вы играли с Linq2SQL? Вы можете найти свой ответ там.

Если вы используете LINQ to Entities, вы сможете создавать сущности из источника данных Oracle. Это намного проще, чем делать их самостоятельно.

Другие вопросы по тегам