История с Nhibernate - PullRequest
       17

История с Nhibernate

0 голосов
/ 01 декабря 2011

Я использую NHibernate для разработки приложения в asp.net mvc. У меня есть некоторые сущности в моей модели, наследуемые от абстрактного класса Entity, что-то вроде этого:

public abstract class Entity
{
    private IList<History> _history = null;

    public virtual long Id { get; set; }
    public virtual IEnumerable<History> History { get { return _history; } }

    public abstract TypeOfHistory GetTypeHistory(); // to return the right type
}

// is it right ?
public enum TypeOfHistory { 
    Product = 1, Employee = 2, Customer = 3
}

public class Product : Entity { /* code */ }
public class Employee : Entity { /* code */ }
public class Customer : Entity { /* code */ }

И у меня есть класс History, в котором есть журнал каждой модификации объекта:

public class History
{
    public virtual string Description { get; set; }
    public virtual DateTime Date { get; set; }
    public virtual string User { get; set; }
    public virtual Entity Entity { get; set; }
    public virtual TypeOfHistory Type { get; set; } // is it right ?

    protected History() { }
}

Я хотел бы знать, как я могу отобразить этот класс History и свойство History в классе Entity? Я имею в виду, что у меня будет таблица для продукта, другая таблица для сотрудника, другая для клиента и т. Д., И только одна таблица под названием «История» для всех объектов (продукт, клиент и т. Д.), Но я не буду создавать внешний ключ. Я думал создать поле, чтобы сохранить тип объекта, но я не знаю, как это сделать, и правильно сопоставить свойство для фильтрации. (в зависимости от типа). Я знаю, как использовать Listerens в nhibernate для ведения журнала.

Спасибо

1 Ответ

2 голосов
/ 01 декабря 2011

Просто предложение ... Рассматривали ли вы использование Auditing Framework? Hibernate (Java) имеет Hibernate Envers, который делает замечательную работу с очень простой настройкой. И похоже, что есть порт для .NET: https://bitbucket.org/RogerKratz/nhibernate.envers

...