Сущность и N-уровневая архитектура в C # - PullRequest
5 голосов
/ 19 мая 2010

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

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 ]

2 голосов
/ 19 мая 2010

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

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.

1 голос
/ 19 мая 2010

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

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

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

1 голос
/ 19 мая 2010

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

0 голосов
/ 19 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...