2017-04-08 137 views
0

我試圖在我的Umbraco支持的網站中使用Petapoco。在我的poco上,我有一個名爲Created的列,它有一個默認的sql值(getDate())。我希望在Petapoco插入和更新時忽略該列,但不能讀取。Petapoco缺少屬性IgnoreOnInsert,IgnoreOnUpdate

任何想法如何才能達到優雅?也許使用自定義映射器或在Petapoco引擎中包含一些新屬性(如IgnoreOnInsert,IgnoreOnUpdate)。

我一直在使用一些黑客,其中一個每個表有兩個poco,一個用於插入更新,另一個用於讀取。但很難接受,令人滿意。

回答

0

我通常只是做一個類的構造函數,並在那裏設置日期屬性。像

public class WhatEvs 
{ 
    ... 
    public WhatEvs() 
    { 
     DateCreated = DateTime.Now; 
    } 
} 
+0

是的,這也是黑客之一,但因爲那麼你需要時刻小心更新它們之前滋潤POCO的,我不喜歡它100%,所以你不要重寫原始值。這也意味着增加sql(和web服務器)上的負載,就像在每次我們需要從sql進行讀操作之前一樣。除了團隊中的新開發人員,如果沒有對此約定進行指導,可能會執行一些代碼並覆蓋poco的所有初始值。 我想要一個類似於IgnoreOnInsert,IgnoreOnUpdate等屬性的解決方案。 – Andrei

0

如果有人仍然對此感興趣,我最終找到了一個很好的解決方案。 那就是停止使用Petapoco並切換到NPoco,它有一個很好的屬性叫'ComputedColumn'。 如果使用[ComputedColumn]屬性修飾屬性,那麼當NPoco生成插入和更新查詢時將不會使用該屬性,但它將用於所選查詢。 這使我可以很好地處理像CreatedDate或UniqueGuid這樣的數據庫處理值,但我在查詢時無法觸及它們。 感謝阿龍誰好心這裏回答了這個問題: https://github.com/CollaboratingPlatypus/PetaPoco/issues/421#issuecomment-348390149