如何使用扩展实体在我的 EF6 class 中创建一个新的 属性 并带有 属性 更改通知?
How can I use an extended entity to create a new property in my EF6 class with property changed notification?
我的实体模型中有一个 table 称为价格。它有几个字段,分别命名为 value0、value1、value2、value3、value4...(这些是它们的字面名称,唉...)。我无法重命名它们或以任何方式更改它们。
我想要的是使用扩展实体创建一个新的 属性 称为值。这将是一个包含 value1、value2 等的集合...
为了访问这些值,我只需要写 prices.values[1]
我需要 属性 为此更改通知。
到目前为止我已经试过了;
public partial class Prices
{
private ObservableCollection<double?> values = null;
public ObservableCollection<double?> Values
{
get
{
if (values != null)
values.CollectionChanged -= values_CollectionChanged;
else
values = new ObservableCollection<double?>(new double?[14]);
values[0] = value0;
values[1] = value1;
values[2] = value2;
values.CollectionChanged += values_CollectionChanged;
return values;
}
private set
{
value0 = value[0];
value1 = value[1];
value2 = value[2];
}
}
private void values_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
Values = values;
}
}
尝试设置值时出现问题。如果我尝试通过编写
来设置一个值
prices.values[0] = 一些值;
新值并不总是反映在集合中(即当我之前设置值然后尝试覆盖该值时)。
我愿意尝试任何可以实现我的目标的方法,我对修复我的解决方案并不珍惜(尽管如果有人能解释我遗漏了什么,那就太好了!)
您可以在不使用集合的情况下对价格 class 实施索引器。
可以用switch to select 属性来写也可以用反射。
在这种情况下,我使用反射。
public double? this[int index]
{
get
{
if (index < 0 || index > 13) throw new ArgumentOutOfRangeException("index");
string propertyName = "Value" + index;
return (double?)GetType().GetProperty(propertyName).GetValue(this);
}
set
{
if (index < 0 || index > 13) throw new ArgumentOutOfRangeException("index");
string propertyName = "Value" + index;
GetType().GetProperty(propertyName).SetValue(this, value);
// Raise your event here
}
}
我的实体模型中有一个 table 称为价格。它有几个字段,分别命名为 value0、value1、value2、value3、value4...(这些是它们的字面名称,唉...)。我无法重命名它们或以任何方式更改它们。
我想要的是使用扩展实体创建一个新的 属性 称为值。这将是一个包含 value1、value2 等的集合...
为了访问这些值,我只需要写 prices.values[1]
我需要 属性 为此更改通知。
到目前为止我已经试过了;
public partial class Prices
{
private ObservableCollection<double?> values = null;
public ObservableCollection<double?> Values
{
get
{
if (values != null)
values.CollectionChanged -= values_CollectionChanged;
else
values = new ObservableCollection<double?>(new double?[14]);
values[0] = value0;
values[1] = value1;
values[2] = value2;
values.CollectionChanged += values_CollectionChanged;
return values;
}
private set
{
value0 = value[0];
value1 = value[1];
value2 = value[2];
}
}
private void values_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
Values = values;
}
}
尝试设置值时出现问题。如果我尝试通过编写
来设置一个值prices.values[0] = 一些值;
新值并不总是反映在集合中(即当我之前设置值然后尝试覆盖该值时)。
我愿意尝试任何可以实现我的目标的方法,我对修复我的解决方案并不珍惜(尽管如果有人能解释我遗漏了什么,那就太好了!)
您可以在不使用集合的情况下对价格 class 实施索引器。 可以用switch to select 属性来写也可以用反射。 在这种情况下,我使用反射。
public double? this[int index]
{
get
{
if (index < 0 || index > 13) throw new ArgumentOutOfRangeException("index");
string propertyName = "Value" + index;
return (double?)GetType().GetProperty(propertyName).GetValue(this);
}
set
{
if (index < 0 || index > 13) throw new ArgumentOutOfRangeException("index");
string propertyName = "Value" + index;
GetType().GetProperty(propertyName).SetValue(this, value);
// Raise your event here
}
}