【问题标题】:How do I specify decimal precision using fluent api with Entity Framework and Code First?如何使用 fluent api 和 Entity Framework 和 Code First 指定小数精度?
【发布时间】:2014-02-07 11:14:43
【问题描述】:

我有一个用于测试 Fluent API 的解决方案。当尝试设置小数的精度时,只有当我将调用放入 OnModelCreating 方法并通过实体时,数据库才会正确更新。尝试使用 EntityTypeConfiguration 类时,数据库拒绝更新。 MilesFromNearestAirport 是有问题的财产。

住宿模式

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 ()

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。

【问题讨论】:

  • 这很奇怪。在我看来一切都很好。 (我对 VB 不够熟悉,但 [Property] 在这种情况下与 Me.Property 相同,对吗?)您是否仅对 HasPrecision 或任何其他 Fluent API 代码有此问题?
  • @Slauma - 是的,我相信 '[Property]' 与 'Me.Property' 相同,但当我回到电脑前时,我会仔细检查(我在现在平板电脑)。我还随机注意到其他配置的问题。例如,我也无法通过“EntiyTypeConfiguration”设置“Key”配置。我也必须使用“OnModelCreating”。但其他配置设置工作得很好。我从发布的代码中删除了我正在使用的其他配置,以使其更易于阅读。

标签: vb.net entity-framework ef-code-first precision fluent-interface


【解决方案1】:

好的,我发现了这个问题,以防其他人遇到这个问题。我正在处理 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 看一看!

【讨论】:

  • Aaaaaah,换句话说Public Sub LodgingConfiguration() 不是类构造函数。好吧,如果您对 C# 不是很熟悉,但如果您对 VB 不是很熟悉(像我一样),您可以很容易地错误地转换它:) 我从来没有见过这个。恭喜您解决了问题!
  • 大声笑,是的,我在阅读您的原始代码并试图找出定义实体类型配置的正确方法时看到了这一点,就像“他为什么要在 vb 中自命名构造函数。网”?很高兴知道,感谢发布。 PS:我也必须从 C# 转换所有内容。为什么没有更多的 VB 程序员?
猜你喜欢
  • 2013-12-09
  • 2014-04-19
  • 1970-01-01
  • 2016-06-08
  • 2012-01-05
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多