我正在尝试将数据库实体(EntityFramework 4.1)映射到 ViewModel(MVMMLight 框架)。在 VM 中为每个数据库字段创建属性就可以完成这项工作,但是感觉不太对,并且在稍后我们讨论映射 46 个数据库表时很难维护。示例代码:
public const string MyPropertyPropertyName = "MyProperty";
public string MyProperty
{
get
{
return _object.MyProperty;
}
set
{
if (_object.MyProperty != value)
{
_object.MyProperty = value;
RaisePropertyChanged(MyPropertyPropertyName);
}
}
}
其中_object
是EntityObject
一个 ViewModel 的指定类型的存储。
我正在考虑使用这样的动态属性
public object this[string propertyName]
{
get
{
System.Reflection.PropertyInfo property = _object.GetType().GetProperty(propertyName);
if (property == null)
return null;
return property.GetValue(_object, null);
}
}
但是将它与{Binding MyProperty}
结果绑定BindingExpression path error: 'MyProperty' property not found
,所以它似乎不是正确的方法。
有没有办法在我自己的类中处理未定义的属性?我认为它会完成这项工作。也许我正试图通过映射来过度操纵整个事情,并且已经有一些不错的、干净的方法来做到这一点?如果是,我想知道。