如何刷新我所有的IQueryable <entityobject>类型属性</entityobject>

时间:2013-01-11 11:12:21

标签: c# .net wpf entity-framework mvvm

我需要刷新所有IQueryable<EntityObject>类型的属性。

我知道您可以通过以下方式刷新集合:

someObjectContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, someEntityObject);

但是我无法获得所有属性:

//Here i want to get all the propeties    
var iQueryablePropertiesList = ViewModel.GetType().GetProperties().Where(x => x.GetType().BaseType is IQueryable<EntityObject>);

//Here i want to loop through all the properties and refresh them
foreach (var item in iQueryablePropertiesList)
{
    someObjectContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, item.GetValue(this, null));
}

//Fire PropertyChanged for all properties
OnPropertyChanged(String.Empty);

iQueryablePropertiesList没有结果。

原因是我需要刷新所有绑定ComboBox的集合。

所以说:

  1. 这是在我的ViewModel中刷新所有馆藏的正确方法吗?
  2. 如果没有,我应该如何处理我的问题?
  3. 如果是,我需要添加LINQ查询才能获得所需的结果?

1 个答案:

答案 0 :(得分:1)

你在网上有错误:

x => x.GetType().BaseType is IQueryable<EntityObject>

BaseType的类型为Type,永远不会是IQueryable<EntityObject>。并且x.GetType()也会返回一个类型,在这种情况下PropertyInfo也会返回。

您要输入的内容是:

x => typeof(IQueryable<EntityObject>).IsAssignableForm(x.PropertyType)

这将检查IQueryable<EntityObject>是否按您的财产类型实施。

public ThisType PropertyName{get;set;} 

至于这是否是一种好方法,我不认为这样反思总是一个问题,它会在很晚之后咬你。我只想重新创建模型。