【发布时间】:2012-04-10 19:33:13
【问题描述】:
我首先使用实体框架代码。尝试将负十进制值保存到 SQL Server 数据库时发生错误。下面列出了我要保存的模型。
public class Material
{
public Material()
{
Categories = new List<Category>();
}
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
public string Description { get; set; }
[Required]
public DateTime Taken { get; set; }
public decimal? Latitude { get; set; }
public decimal? Longitude { get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
这里我尝试在模型材质中设置小数点的精度(纬度/经度)。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Material>().Property(x => x.Latitude).HasPrecision(8, 7);
modelBuilder.Entity<Material>().Property(x => x.Longitude).HasPrecision(8, 7);
}
在数据库中,列信息如下所示:
dbo.Materials.Latitude (decimal(8, 6), null)
dbo.Materials.Longitude (decimal(8, 6), null)
如果我尝试保存像 -1m 这样的负值,一切正常。但是,一旦我尝试保存任何更大的值或带有小数的值,例如-123 或-123.123456,数据上下文在保存时总是会抛出异常。
我得到的例外是:
保存不公开外键的实体时出错 他们关系的属性。 EntityEntries 属性将 返回 null,因为无法将单个实体标识为源 的例外。可以进行保存时的异常处理 通过在实体类型中公开外键属性更容易。看 InnerException 了解详情。
查看内部异常,我们可以看到这可能是问题的原因:
{"参数值'-117.246108'超出范围。"}
我该如何解决这个问题?
【问题讨论】:
-
你能告诉我数据单元的类型吗?
-
该字段的架构是什么样的?
标签: c# entity-framework-4.1 ef-code-first sql-server-2008-r2