2012-02-26 80 views
6

我的一個實體類可以作爲BIGINT存儲在sql server 數據庫中。我的問題是:如何獲得實體框架 上下文知道如何存儲和檢索我的實體類的實例?如何告訴實體框架如何保存自定義類型的實例(可以作爲標量存儲)

更多詳細信息。我使用的是Noda Time,它可以表示比SQL或.NET日期時間(並且它是甜點頂部)更寬的 日期範圍。我的實體課堂發生的事情,是一個圍繞NodaTime的即時課程 的包裝。我可以設置一個很長的Happening,並且可以從諸如.SetFromLong(long instant)和.ToLong()這樣的方法中獲得很長的一段距離。

目前我有我的模型工作,保存類網點日期時間類型的 屬性的類。如果我想使用自定義類型「Happening」的屬性 ,我該如何告訴Entity Framework如何保存這些內容?

如果我正在閱讀這篇關於建模和製圖的文章,我是在 的正確軌道上還是錯過了更簡單的東西?

http://msdn.microsoft.com/en-us/library/bb896343.aspx

我使用實體框架4.

+0

重複訪問它的類:http://stackoverflow.com/questions/5820915/entity-framework-custom-data-type-mapping – 2012-02-26 09:13:34

回答

6

我的建議做的是你的實體NodaTime和長增加2個屬性,並在您的EF使用[NotMapped]排除您的NodaTime財產模型,然後在你的getter/setter中更新long。

public class MyEntity{ 
    public long TimeAsLong{get;set;} 
    [NotMapped] 
    public Happening { 
     get{ 
     return new Happening().SetFromLong(TimeAsLong); 
     } 
     set { 
     TimeAsLong = value.ToLong(); 
     } 
    } 
} 

這樣做的結果將是長期存儲在數據庫,但你可以通過NodaTime

+1

工作,謝謝。除了適應EF,我不需要TimeAsLong,這是否會出現很多,並且(根據您的經驗),您是否嘗試將這些成員明確地命名爲TimeAsLongForEF,如此類推? – 2012-02-26 17:46:59

+0

關於存儲與演示有關的所有內容,有時它更好/更高效地存儲與您想要使用它不同的東西,這只是一個例子。實際上我並沒有找到需要這樣做的地方,但它偶爾會發生,另一個例子是,在數據庫中存儲單個Char需要將它轉換爲寫入模型中的字符串(EF不區分varchar [1]和varchar [2]它們都是字符串)。就個人而言,我不會將該字段標記爲EF,但那只是一個偏好。 – 2012-02-26 22:44:02

+0

另請注意,EF並不真正關心這個Propery是否公開(如果您碰巧使用Code First)。儘管你仍然需要一些方法來映射它,即使它是私人的。我們做了什麼,我們將EF配置類放在實體類中,以便它可以訪問私有字段並進行映射。缺點是你在實體中映射類可能會有問題,也可能沒有問題。 – 2013-10-11 05:01:34

相關問題