C# 不在实体框架中映射ReactiveUI属性
首先使用实体框架代码,我创建了一些对象来在数据库中存储数据。我在这些对象中从ReactiveUI库实现ReactiveObject类,因此每当某个程序更改以获得更具响应性的UI时,我都会收到通知 但实现这一点会为我的对象添加3个属性,即Changed、Changing和throweexceptions。我真的不认为这是个问题,但是当在DataGrid中加载表时,这些表也会得到一个列 有没有办法隐藏这些属性?我不能仅仅手动定义列,因为我的所有表都有一个datagrid,我从组合框中选择 解决方案如下所示,也可在此找到:C# 不在实体框架中映射ReactiveUI属性,c#,entity-framework,reactiveui,C#,Entity Framework,Reactiveui,首先使用实体框架代码,我创建了一些对象来在数据库中存储数据。我在这些对象中从ReactiveUI库实现ReactiveObject类,因此每当某个程序更改以获得更具响应性的UI时,我都会收到通知 但实现这一点会为我的对象添加3个属性,即Changed、Changing和throweexceptions。我真的不认为这是个问题,但是当在DataGrid中加载表时,这些表也会得到一个列 有没有办法隐藏这些属性?我不能仅仅手动定义列,因为我的所有表都有一个datagrid,我从组合框中选择 解决方案如
void dataTable_AutoGeneratingColumn(对象发送方,DataGridAutoGeneratingColumnEventArgs e)
{
List removeColumns=新列表()
{
“改变”,
“更改”,
“ThrownExceptions”
};
if(removeColumns.Contains(例如Column.Header.ToString()))
{
e、 取消=真;
}
}
有几种方法可以先使用代码来实现这一点。第一个选项是使用以下内容注释属性:
这是供你参考的。因为您继承的是基类,并且没有访问该类属性的权限,所以不能使用该类。第二个选项是与方法一起使用:
另一个选项是创建继承的类:
公共抽象类ReactiveObjectConfiguration:EntityTypeConfiguration
其中tenty:ReactiveObject
{
受保护的反应对象配置()
{
忽略(e=>e.Changed);
忽略(e=>e.Changing);
忽略(e=>e.throweexceptions);
}
}
公共类YourEntityConfiguration:ReactiveObjectConfiguration
{
公共YourEntityConfiguration()
{
//您的额外配置
}
}
此方法的优点是为所有反应对象定义基线配置,并消除所有定义冗余
有关Fluent配置的更多信息,请参见上面的链接。我已尝试在OnModelCreating中添加忽略,但这些列仍显示在我的datagrid中。我想这是因为DataGrid不知道这些属性在实体框架中被忽略了经过一些挖掘,我发现这个问题解决了我的剩余问题:谢谢你的快速回答@TomVandenbussche很高兴你能找到相关的答案!我正要写一篇关于DataGrid配置的文章。;)
void dataTable_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
List<string> removeColumns = new List<string>()
{
"Changing",
"Changed",
"ThrownExceptions"
};
if (removeColumns.Contains(e.Column.Header.ToString()))
{
e.Cancel = true;
}
}
[NotMapped]
public bool Changed { get; set; }
modelBuilder.Entity<YourEntity>().Ignore(e => e.Changed);
modelBuilder.Entity<YourEntity>().Ignore(e => e.Changing);
modelBuilder.Entity<YourEntity>().Ignore(e => e.ThrowExceptions);
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// .. Your model configuration here
}
public abstract class ReactiveObjectConfiguration<TEntity> : EntityTypeConfiguration<TEntity>
where TEntity : ReactiveObject
{
protected ReactiveObjectConfiguration()
{
Ignore(e => e.Changed);
Ignore(e => e.Changing);
Ignore(e => e.ThrowExceptions);
}
}
public class YourEntityConfiguration : ReactiveObjectConfiguration<YourEntity>
{
public YourEntityConfiguration()
{
// Your extra configurations
}
}