【发布时间】:2017-11-23 08:22:49
【问题描述】:
如何强制 EF Core 为单个属性处理多种 sql 数据类型?目标是处理处理相同类型但不统一的多个客户端数据库。
采取以下措施,这似乎仅在客户端数据库具有十进制兼容数据类型时才有效。
Public Property PieceThickness As Decimal
Get
PieceThickness = _pieceThickness
End Get
Set(value As Decimal)
_pieceThickness = value
End Set
End Property
但有些客户端会将 PieceThickness 设为 varchar(9)。因此即使我手动映射列也会引发错误。
modelBuilder.Entity(Of MailPiece)().Property(Function(t) t.PieceThickness).
HasColumnName("Thickness").HasColumnType("varchar(9)")
“读取属性‘MailPiece.PieceThickness’的数据库值时发生异常。预期类型为‘System.Nullable`1[System.Decimal]’,但实际值为‘System.String’类型。”
我显然可以为 PieceThickness 设置另一个字符串属性,但如果可能的话,我想避免这种情况。使属性成为对象也不起作用。
我了解模型需要与数据库完全匹配,但我希望有一个解决方法。
编辑:我认为处理这种情况的最佳选择是使用工厂模式或提供者工厂:http://www.dofactory.com/net/design-patterns
这样做,我将拥有一个可扩展的解决方案,该解决方案可以逐个客户偏离标准。
【问题讨论】:
-
解决此问题后将有助于解决此问题。 github.com/aspnet/EntityFramework/issues/242
标签: sql vb.net orm entity-framework-core