2011-08-02 183 views
1

我有一個數據模型,需要跟蹤更改。我可以每月對模型進行多達100,000次的更改/更新。我的模型涉及跟蹤一項任務如何完成並可以分解爲三種基本類型。應該使用什麼模型結構來跟蹤更改?

目前,我有我的模型是這樣,但有分歧的各類三明治成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

在EF中,我做了類似於三明治類的子類化,並使用特定控制器中的類。

在另一方面,我已經處理這樣的事情,例如,創建只是多了一個領域:

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指向原始的,現在更新的版本ID)。

這當然要求你改變你列出三明治的其他地方,只查看那些不是修訂版的地方。

如果您需要立即引用上一個或下一個版本,則可以創建int? PreviousVersion和/或int? NextVersion以避免在數據庫中進行搜索。

+0

謝謝Kensai。這是一個有趣的想法,我今天會看看。 – trevorc