2016-01-29 70 views
0

我在我的項目中實現了一個代表我的數據庫表中的一行的POCO。我想修改構造函數中的一個值。實體框架實體模型的值在運行構造函數時爲空

遺憾的是,似乎值後構造只運行稀少,所以沒有辦法,我執行我需要的邏輯。這是一個錯誤還是設計?

我應該提到我正在使用Code First。

public partial class CheckpointValue 
    { 
     [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id { get; set; } 

     [Column("saljare")] 
     public int SalesAgentId { get; set; } 

     [Column("volym")] 
     public int Value { get; set; } 

     [Column("datum")] 
     public DateTime Date { get; set; } 

     [Column("typ")] 
     public string Type { get; set; } 


     public CheckpointValue() 
     { 
      // Values empty... Why haven't they been populated when the constructor is run? 
     } 
    } 

回答

1

不幸的是,它似乎是運行 構造後的值僅填充,所以沒有辦法,我執行我的要求 邏輯。這是一個錯誤還是設計?

這是設計。 順便說一句,你將如何能夠獲得這些屬性已經在施工期間填充而不提供構造函數參數?

也許你試圖在錯誤的地方實現你的邏輯。如果您正在尋找實施業務規則,域驗證或誰知道什麼,應該在另一個類中完成。例如,在返回請求的對象之前,您的存儲庫將是一個很好的地方。

public CheckpointValue GetById(Guid id) 
{ 
     CheckpointValue checkpointValue = YourDbContext.CheckpointValues.Find(id); 
     // Implement here what you wanted in your class constructor... 
     return checkpointValue; 
} 
+0

這就是我所懷疑的。我通過在存儲庫中實現邏輯來解決它。真的很煩人的「功能」設計......再次感謝。 – silkfire

+0

@silkfire我相信你根本不理解這個問題。這是通過設計,但它是如何對象不僅在EF中工作,而且在一般情況下在C#中工作。你不能在建造前獲得已經設置的屬性,並且你不能設置沒有初始化或構造函數的屬性......... –