【发布时间】: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