Какую структуру модели я должен использовать для отслеживания изменений? - PullRequest
1 голос
/ 03 августа 2011

У меня есть модель данных, которая требует отслеживания изменений. У меня могло быть столько же ~ 100 000 изменений / обновлений моей модели в месяц. Моя модель включает в себя отслеживание того, КАК задача выполнена, и ее можно разбить на 3 основных типа.

У меня сейчас такая модель, но я разделил типы сэндвичей на 3 отдельных контроллера, потому что каждый сэндвич сделан очень по-разному:

public class Sandwich
{
    public int Id { get; set; }
    public int SandwichTypeId { get; set; } //This is an enum type
    //About a dozen other properties that define HOW the sandwich gets made
}

Я мог бы разбить его на части так, чтобы он соответствовал моим контроллерам:

public class PeanutButterAndJellySandwich
{
    public int Id { get; set; }
    //No enum sandwich type
    //About a dozen other properties that define HOW the sandwich gets made
}

public class HamSandwich
{
    public int Id { get; set; }
    //No enum sandwich type
    //About a dozen other properties that define HOW the sandwich gets made
}

// и т.д.

2 части Вопрос:

  1. Есть ли какое-либо преимущество (преимущества) в разбивании модели?
  2. Если так, то эти преимущества будут побеждены, потому что мне придется также добавлять отдельные таблицы отслеживания?

Спасибо.

1 Ответ

1 голос
/ 03 августа 2011

В EF я сделал что-то вроде подкласса класса Sandwich и использовал их в определенных контроллерах.

С другой стороны, я обработал подобные вещи, например, создав еще одинfield:

public class Sandwich
{
    public int? CurrentVersion { get; set; } 
    public int Id { get; set; }
    public int SandwichTypeId { get; set; } //This is an enum type
    //About a dozen other properties that define HOW the sandwich gets made
}

Таким образом, один сэндвич может иметь много предыдущих версий, каждая из которых будет указывать на текущую.В своей процедуре обновления я создал дубликат (с указанием CurrentVersion старой версии на исходный, теперь обновленный, идентификатор версии).

Это, конечно, требует, чтобы вы изменили другие места, где вы указали бутерброды, чтобы искать только те, которые не являются ревизиями.

Если вам нужно ссылаться сразу на предыдущую или следующую версию, вы можете создать int? PreviousVersion и / или int? NextVersion, чтобы избежать поиска в вашей базе данных.

...