0

我在这里找到了以下代码:Breeze BeforeSaveEntityonly 只允许更新第二个答案中的已添加实体。据我了解,它不能(按原样)工作,因为该属性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 回答