2013-07-01 63 views
0

我有幾個實體有一個索引字段,我用它來指定顯示記錄的順序。這個字段是一個整數,它必須從1到n沒有任何「洞」(不能有1,2,4,5)。爲了保持索引字段,我需要做到以下幾點:如何對實現接口的實體執行創建/保存/刪除操作?

  • 添加索引字段應該設置,使得新記錄最後
  • 放置在編輯,如果該指數變化,記錄在舊的和編輯記錄的新指標之間需要進行更新
  • 刪除具有比一個更高的指數記錄被刪除需要更新

所以,我想知道的是,我不能爲每個「可排序」類定義這種行爲,我可以用更通用的方式來做這件事嗎? IE瀏覽器。爲實現接口的實體執行這些操作,ISortable?

這個邏輯放在哪裏?

在此先感謝!

+1

聽起來像是一個(摘要)基類。 – CodeCaster

回答

0

您實現在並存的波蘇斯分部類的界面(或者從一個抽象基類繼承),你集中在你的Context類從DbContext或作爲裝飾,以DbContext繼承了更新。您需要實現自己的抽象(例如IUnitOfWork),因爲DbContext沒有實現任何有用的接口。

下面是在Context內部實現一個簡單的例子:

public override int SaveChanges() 
{ 
    foreach(IAuditData item in GetChangedAuditDataEntities()) 
    { 
     //...... update the entity 
    } 
    return base.SaveChanges(); 
} 


private IEnumerable<IAuditData> GetChangedAuditDataEntities() 
{ 
    return (
     from entry in ChangeTracker.Entries() 
     where entry.State != EntityState.Unchanged 
     select entry) 
     .OfType<IAuditData>(); 
} 
+0

謝謝!我實際上正在考慮做類似的事情,集中Context類中的通用邏輯。但我不確定這是否是最好的方式。我想我正在尋找更「模塊化」的方式,以便DbContext類不會臃腫。我當然可以把邏輯放在一個單獨的類中,並從DbContext中調用它。 – Stian

+0

正確的方法是使用裝飾器。看到這裏http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91例如 – qujck