1

我有一個我用來測試Fluent API的解決方案。當試圖設置十進制精度時,只有在將調用放入OnModelCreating方法並通過實體時才能正確更新數據庫。當試圖使用EntityTypeConfiguration類時,數據庫拒絕更新。 MilesFromNearestAirport是有問題的財產。如何在Entity Framework和Code First中使用流利的api指定小數精度?

住宿型號

Public Class Lodging 
    Public Property LodgingId As Integer 
    Public Property MilesFromNearestAirport As Decimal 
End Class 

的DbContext類

Public Class BreakAwayContext 
     Inherits DbContext 

     Public Property Lodgings As DbSet(Of Lodging) 
     Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder) 
      modelBuilder.Configurations.Add(New LodgingConfiguration) 
     End Sub 
    End Class 

寄宿配置類

Public Class LodgingConfiguration 
    Inherits EntityTypeConfiguration(Of Lodging) 

    Public Sub LodgingConfiguration() 
     [Property](Function(l) l.MilesFromNearestAirport).HasPrecision(8, 1) 
    End Sub 

End Class 

我使用測試控制檯應用程序。這裏是副主()

Sub Main() 
    Database.SetInitializer(New DropCreateDatabaseAlways(Of BreakAwayContext)) 
End Sub 

正如你所看到的,我不管更改模型刪除和重建數據庫中的每個運行。如果我將小數精度配置設置放在OnModelCreating方法中,一切都很好。

Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder) 
     modelBuilder.Entity(Of Lodging).Property(Function(l) l.MilesFromNearestAirport).HasPrecision(8, 1) 
    End Sub 

是否有使用EntityTypeConfiguration或有沒有人有,我可能出了問題有什麼建議任何限制?我將發佈生成的數據庫表的圖片,但由於我的聲望點,我無法發佈圖像。請讓我知道如果您想了解有關類,解決方案,環境等的信息,我正在使用EF6,.NET4,VB.NET和SQL Server Express。

+0

這很奇怪。看起來對我來說都很好。 (我對VB不夠熟悉,但是'[Property]'在這種情況下與'Me.Property'相同,對嗎?)只有'HasPrecision'或其他任何Fluent API代碼纔有這個問題嗎? – Slauma

+0

@Slauma - 是的,我相信'[Property]'和'Me.Property'是一樣的,但是當我回到電腦前時(我現在在平板電腦上)時,我會仔細檢查。我也隨意地注意到其他配置的問題。例如,我無法通過'EntiyTypeConfiguration'設置'Key'配置。我也必須使用'OnModelCreating'。但其他配置設置工作得很好。我從發佈的代碼中刪除了其他配置,以便於閱讀。 – macoms01

回答

2

好的,我發現這個問題以防其他人遇到這種情況。我正在處理C#示例,並使用在線轉換器將它們轉換爲VB。我對C#不是很熟悉,並且錯誤地轉換了代碼。

此行Public Sub LodgingConfiguration()

Public Class LodgingConfiguration 
    Inherits EntityTypeConfiguration(Of Lodging) 

    Public Sub LodgingConfiguration() 
     [Property](Function(l) l.MilesFromNearestAirport).HasPrecision(8, 1) 
    End Sub 

End Class 

本來應該Public Sub New()

Public Class LodgingConfiguration 
    Inherits EntityTypeConfiguration(Of Lodging) 

    Public Sub New() 
     [Property](Function(l) l.MilesFromNearestAirport).HasPrecision(8, 1) 
    End Sub 

End Class 

這似乎已經解決了所有問題。感謝@Slauma看看!

+1

Aaaaaah,換句話說'Public Sub LodgingConfiguration()'不是類構造函數。那麼,如果你對C#不是很熟悉,但是如果你對VB不是很熟悉(像我一樣),那麼你可以很容易地將其錯誤地轉換成這樣:)我從未見過這個。恭喜您解決問題! – Slauma

+0

大聲笑,是啊,我看到這個,當我正在讀你的原始代碼,並試圖找出正確的方式來定義一個實體類型配置,就像「爲什麼他會自我命名vb.net中的構造函數」?很高興知道,感謝發佈。 PS:我不得不從C#轉換所有東西。爲什麼沒有更多的VB程序員? – Lopsided

相關問題