我正在学习C#,对于网络扫描项目,我想将IP地址保存为我的SQL Server的二进制文件,因为这似乎是"最佳"解决方案.
但由于我很新,我对如何告诉EF6这样做非常困惑.
我想IPAddress在我的代码中使用变量类型,但EF会将其保存为BIGINT我的数据库(使用代码优先).
我想我可以使它成为一个byte []并使用getter和setter来将二进制转换为该IPAddress类型?
或者我可以告诉它使用BINARY数据注释吗?我还需要手动进行转换吗?
有人可以为我澄清一下吗?
因为我会将大量IP保存到数据库中,所以我希望以尽可能最好的方式保存它们.
非常感谢!
c# sql-server entity-framework code-first entity-framework-6
我的 c# 对象有一个小数属性:
public decimal LastPrice { get; set; }
Run Code Online (Sandbox Code Playgroud)
在处理我的对象时,设置了十进制值。例如:
LastPrice = 0.091354;
Run Code Online (Sandbox Code Playgroud)
我修改了 DbContext 以提高小数精度,如另一篇 stackoverflow 帖子中所述:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var property in modelBuilder.Model.GetEntityTypes()
.SelectMany(t => t.GetProperties())
.Where(p => p.ClrType == typeof(decimal) || p.ClrType == typeof(decimal?)))
{
property.SetColumnType("decimal(38, 10)");
}
}
Run Code Online (Sandbox Code Playgroud)
Microsoft Sql Server Management Studio 中的表设计视图反映了此配置。这是从 SSMS 编写的表:
CREATE TABLE [dbo].[TradedCurrencyPairs](
[Id] [int] IDENTITY(1,1) NOT NULL,
[LastPrice] [decimal](38, 10) NOT NULL,
...
Run Code Online (Sandbox Code Playgroud)
当我在调试期间检查对象并将其添加到我的 DbContext 时,它看起来不错:

但在数据库中它最终为 0.0000000000。
据我所知,该值仍在四舍五入,就好像它的精度为 2 一样。本应为 0.09232 的值变成了 0.0900000000。所以所有小数仍然被削减。 …