たとえば、私はこのクラスを持っています
class Person{
private int _id = int.MinValue;
private string _name = string.Empty;
private int _age = int.MinValue;
private string _city = string.Empty;
public string Id{ get { return _id ; } set { _id = value; } }
public string Name{ get { return _name; } set { _name = value; } }
public int Age{ get { return _age; } set { _age = value; } }
public string City{ get { return _city ; } set { _name = city; } }
}
そして、私がテーブルに表示する Person のリスト。このテーブルには「編集/インライン」があります。一部の人のプロパティにはテーブル内のセル(td)があるため、javascript/jquery を介してセルを編集すると、変更された値で json オブジェクトが作成され、サーバーに送信します。json オブジェクトには、変更されたプロパティのみが含まれます。「名前」を編集すると、json オブジェクトは次のようになります。
{"obj":{"Id":"1","Name":"Anna"}}
しかし、サーバーへのオブジェクト Person は次のようになります
Id = 1, Name = "Anna", Age = 0, City = null
したがって、問題は次のとおりです。更新ストアド プロシージャを実行するには、変更されたプロパティの例外に対するすべての元の値を持つオブジェクトを作成する必要があります。この例では、次のオブジェクトを取得します。
Id = 1, Name = "Anna", Age = 25, City = "New York"
このオブジェクトを作成するには、このメソッドを使用します
public static TEntity CopyTo<TEntity>(this TEntity OriginalEntity, TEntity NewEntity){
PropertyInfo[] oProperties = OriginalEntity.GetType().GetProperties();
foreach (PropertyInfo CurrentProperty in oProperties.Where(p => p.CanWrite))
{
if (CurrentProperty.GetValue(OriginalEntity, null) == null)
{
CurrentProperty.SetValue(OriginalEntity, CurrentProperty.GetValue(NewEntity, null), null);
}
}
return OriginalEntity;
}
新しいオブジェクトに値Person
を持つプロパティがあるnull
場合、元の値から元の値を取得しますPerson
( NewEntity
)。クライアントからサーバーへのAge
プロパティは ではなく になるため、この方法は数値では機能しませ0
んnull
。
この問題を解決するにはどうすればよいですか? 私が使用できないと考えるには:
- プロジェクト全体で非常に多くのコード行を変更する必要があるため、null 許容型。
- テーブルには Person のすべてのプロパティが含まれていない可能性があるため、JavaScript でオブジェクト全体を作成してから、変更された値のみを変更することはできません。
私は私の悪い英語で十分に明確だったと思います