0

ここで次のコードを見つけました: Breeze BeforeSaveEntityonlyは、2 番目の回答で追加されたエンティティへの更新のみを許可します。私が理解している限り、プロパティModificationDateは一般的なエンティティの既知のプロパティではないため、(そのままでは) 機能しません。コンパイルエラーが発生しましたobject does not contain a definition for 'ModificationDate' and no extension method 'ModificationDate' accepting a first argument of type 'object' could be found

protected override bool BeforeSaveEntity(EntityInfo entityInfo)  
{
  if(entityInfo.EntityState== EntityState.Modified)
  {
     var entity = entityInfo.Entity;
     entityInfo.OriginalValuesMap.Add("ModificationDate", entity.ModificationDate);
     entity.ModificationDate = DateTime.Now;
  }
}

ここに画像の説明を入力

次のように進めます。

protected override bool BeforeSaveEntity(EntityInfo entityInfo)  
{
  if(entityInfo.EntityState== EntityState.Modified)
  {
     Product entity = (Product)entityInfo.Entity;
     entityInfo.OriginalValuesMap.Add("ModificationDate", entity.ModificationDate);
     entity.ModificationDate = DateTime.Now;
  }
}

次に、この修正されたバージョンのコードでは、指定されたエンティティに指定されProductたプロパティがModificationDateあり、すべてが適切にコンパイルされます。

私の質問:varこのコードを別のエンティティ (製品、クライアントなど) に使用したいので、(宣言を使用して) ジェネリック エンティティを使用したい場合はどうすればよいでしょうか。出来ますか?

私の質問が十分に明確であることを願っています。

ありがとう。

4

1 に答える 1

0

c# 'dynamic' キーワードを使用できます。このコードは、(どのようなタイプの) エンティティにも "ModificationDate" プロパティがある限り機能します。

protected override bool BeforeSaveEntity(EntityInfo entityInfo)  
{
  if(entityInfo.EntityState== EntityState.Modified)
  {
     var entity = (dynamic)entityInfo.Entity;
     entityInfo.OriginalValuesMap.Add("ModificationDate", entity.ModificationDate);
     entity.ModificationDate = DateTime.Now;
  }
}
于 2013-07-15T18:18:53.460 に答える