我试图实现以下目标
public void Add<T1, R> ( T1 entity, R virtualEntity )
{
entity.Set<R>().Add( virtualEntity );
}
也就是说,给定T1 entity
和R virtualEntity
,我希望能够将该虚拟实体添加到T1 entity
DbSet
。< / p>
当然,T1 entity
没有Set方法。有没有办法做到这一点?
例如,我有师生关系,我想做
Teacher.Set<Student>().Add("John");
当然,教师会有Teacher.Students
,但我无法通过通用方法访问它。我需要一种通用的方法来访问给定类型的虚拟集。
答案 0 :(得分:0)
找到解决方案。
public void Add<T1, R> ( T1 entity, R virtualEntity, string virtualStr )
{
var result = entity.GetType().GetProperty( virtualStr );
var value = result.GetValue( entity ) as Collection<R>;
if ( value != null ) value.Add( virtualEntity );
else
{
result.SetValue( entity, new Collection<R>() );
value = result.GetValue( entity ) as Collection<R>;
value.Add( virtualEntity );
}
}
我这样使用它:
Add(teacher, student, "Students");