dpo*_*ada 5 sql-server entity-framework
是否可以强制实体框架代码首先在C#实体中使用浮点数(或双精度数),并将它们映射到SQL Server中的小数位?需要进行转换,并且可能存在从十进制到浮点或双精度的精度损失,但假设由于特定域而可以避免,EF会让你这样做吗?
例如,我想拥有
public class House
{
...
public float Width { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
映射到
CREATE TABLE [dbo].[Houses] (
...
[Width] [decimal](12, 4) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
这可以通过EF属性,Fluent API或其他方式完成吗?
不,不可能创建这样的映射.decimalSQL Server和/ float或double.NET 上的类型不兼容.当你尝试像这样的映射时,这就是异常所说的
modelBuilder.Entity<House>()
.Property(h => h.Width)
.HasColumnType("decimal"); // Does not work !
Run Code Online (Sandbox Code Playgroud)
不幸的是,EF不支持不同基元类型之间的任何映射.您被迫在.NET中使用与SQL Server中的列类型兼容的类型.
一种可能的(不是非常好的)解决方法是在模型类中使用两个属性,并且只将一个属性映射到数据库:
public class House
{
// ...
private decimal _width;
public decimal Width // mapped to database column as decimal
{
get { return _width; }
set { _width = value; }
}
[NotMapped] // <- not mapped to a database column
public float WidthAsFloat
{
get { return (float)_width; }
set { _width = (decimal)value; }
}
}
Run Code Online (Sandbox Code Playgroud)
如果源编号不适合目标类型,则类型转换可以抛出异常,因此可能需要更复杂的转换.
| 归档时间: |
|
| 查看次数: |
5560 次 |
| 最近记录: |