0

まず、Entity Frameworkコードで作業しています。負の10進値をSQL Serverデータベースに保存しようとすると、エラーが発生します。保存しようとしているモデルを以下に示します。負の10進値を保存できません。

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プロパティは を返します。エンティティタイプに外部キーのプロパティを公開することで、保存時の例外の処理を容易に行うことができます( )。詳細については、 InnerExceptionを参照してください。

{「パラメータ値は 『-117.246108』範囲外です。」}

を:私たちは、これが問題の原因であるかもしれないことを見ることができ、内部例外に探し

この問題を解決するにはどうすればよいですか?

+0

データセルのタイプを教えてください。 – Likurg

+0

そのフィールドのスキーマはどのように見えますか? –

答えて

2

拡張子 "HasPrecision(8、7)"で分かっている限り、decimalは合計8桁になるように定義しています。右側は最大7桁です。 小数点以下の-117.246108は9桁ですが、 "HasPrecision(9、7)"を変更してみてください。

1

これはモデルの設定とまったく同じです。 HasPrecision(8,7)は、小数点の両側の合計桁数が8で、小数点の右側の桁数の合計が7であることを意味します。したがって、小数点の左側には1桁しか指定できません。 '-117.246108'を保存するには、少なくとも精度9とスケール6が必要です。