0

データベース ファーストの Entity Framework を使用して既存のデータベースにアクセスし、その一環としてストアド プロシージャをインポートしています。問題は、ストアド プロシージャの入力パラメーターはオプションではありませんが、null 許容としてマップされることです。

これはストアド プロシージャの宣言です。

CREATE PROCEDURE [dbo].[reverseGeocodeCity](
    @latitude FLOAT,
    @longitude FLOAT)
AS
--(snip)

関数インポート マッピングは、対応するメソッドとしてこれを作成しました。

public virtual ObjectResult<City> reverseGeocodeCity(
    Nullable<double> latitude, Nullable<double> longitude)

ストアド プロシージャはNULL、そのパラメータを受け入れるようには意図されていません。doubleEntity Framework に入力パラメーターをではなくとしてマップさせるにはどうすればよいdouble?ですか?

4

1 に答える 1

0

問題の回避策を見つけたのと同じ問題がありました。ダブルをラップするだけですか?基本エンティティで倍増するプロパティ。Hier はコードです:

Notmapped エンティティ (Wrapper エンティティ) は外部から使用され、もう 1 つは DB から格納およびロードされます。

継承されたエンティティ コード:

[NotMapped]
public double Longitude
{
  get
  {
    return this.FromNullable(this.longitude);
  }

  set
  {
    this.PropertyChange(ref this.longitude, value);
  }
}


[Column("Longitude")]
public double? LongitudeStored
{
  get
  {
    return this.longitude;
  }

  set
  {
    this.PropertyChange(ref this.longitude, value);
  }
}

Hier は基本エンティティ コードです。

protected double FromNullable(double? value)
{
  return value.HasValue ? value.Value : double.NaN;
}


protected void PropertyChange(ref double? propertyValue, double newValue, [CallerMemberName] string propertyName = "")
{
  this.PropertyChangeCore(ref propertyValue, double.IsNaN(newValue) ? (double?)null : (double?)newValue, propertyName);
}


protected void HandlePropertyCore(ref double? propertyValue, double? newValue, [CallerMemberName] string propertyName = "")
{
  if ((newValue.HasValue || propertyValue.HasValue) &&    // If both are null than do not fire.
       ((!propertyValue.HasValue || double.IsNaN(propertyValue.Value))
       ^ (!newValue.HasValue || double.IsNaN(newValue.Value))   // If one of them is null or NaN then fire according to XOr rule.
       || Math.Abs(propertyValue.Value - newValue.Value) > double.Epsilon)) // If the are not the same than fire.
  {
    propertyValue = newValue;
    this.HandlePropertyCore(propertyName); // HERE YOU NEED JUST TO HANDLE DOUBLE PROPERTY
  }
}
于 2013-09-18T11:26:44.130 に答える