實體框架7為模型構建器設置小數精度

entity-framework-core

我一直試圖弄清楚如何設置EF7(Beta 4)的小數精度沒有運氣。

我期待做類似的事情:

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

這似乎不可用,但我能夠在GitHub的存儲庫中找到以下類:

https://github.com/aspnet/EntityFramework/blob/7.0.0-beta4/src/EntityFramework.Relational/RelationalDecimalTypeMapping.cs

沒有使用RelationalTypeMapping類或方法簽名的示例。也許這只是用作檢索信息的映射api的一部分?

我可能期望的另一個地方是:

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

要么

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

這些只需要一個字符串,這個功能還沒有實現,或者我只是沒有找到正確的位置?

編輯:剛剛意識到字符串可能是.ColumnType(“十進制(10,6)”)類型的解決方案,直到進一步構建,仍然不介意得到一些澄清,因為我寧願不使用字符串

編輯:在從bricelam澄清之後,我最終創建了以下擴展以供使用,以避免使用字符串,我感謝他們的方法簡單:

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

用法示例:

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

編輯:對RC1進行修改

我還沒有對它們進行過測試,但我只是將以下2個樣本匯總到RC1中

modelBuilder.Entity<SomeClass>().Property(p => p.DecimalProperty).Precision(10, 6)

由於我還沒有嘗試過這個,我不確定“HasColumnType”或“ForSqlServerHasColumnType”之間的正確用法,但希望這會指向某個人正確的方向。

一般承認的答案

您的解決方法是我們想要的設計。您可以設置精度,比例,最大長度,unicode / ansi,固定/可變長度等類型,而不是擁有一堆“facets”。我們決定保持簡單:如果默認類型映射不是什麼你想要的,告訴我們使用什麼類型。一直有人談論這個決定並重新引入“方面”。如果您對此感到強烈,我會鼓勵您創建一個新問題

另請注意,目前在類型映射中存在許多其他錯誤,但是在我們發布beta5時應該修復它們。


熱門答案

顯示的示例似乎已根據EF RC1過時。

以下是我在十進製字段上設置精度的方法。

說我有一個實體

public class Review
{
    public int ReviewId { get; set; }
    public decimal TotalScore { get; set; } //I want a precision field in DB
    public DateTime CreatedOn { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
}

然後在我的上下文類中,在模型創建時,我實例化映射(我可以在那裡進行映射,但我喜歡將它保持分離)

public class Review
{
    public int ReviewId { get; set; }
    public decimal TotalScore { get; set; } //I want a precision field in DB
    public DateTime CreatedOn { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
}

然後是映射。請記住使用模型擴展所在的命名空間:

public class Review
{
    public int ReviewId { get; set; }
    public decimal TotalScore { get; set; } //I want a precision field in DB
    public DateTime CreatedOn { get; set; }
    [Timestamp]
    public byte[] RowVersion { get; set; }
}



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因