一般地将对象添加到Set

时间:2016-01-09 23:20:02

标签: c# asp.net-mvc entity-framework

我试图实现以下目标

public void Add<T1, R> ( T1 entity, R virtualEntity )
        {
            entity.Set<R>().Add( virtualEntity );
        }

也就是说,给定T1 entityR virtualEntity,我希望能够将该虚拟实体添加到T1 entity DbSet。< / p>

当然,T1 entity没有Set方法。有没有办法做到这一点?

例如,我有师生关系,我想做

Teacher.Set<Student>().Add("John");

当然,教师会有Teacher.Students,但我无法通过通用方法访问它。我需要一种通用的方法来访问给定类型的虚拟集。

1 个答案:

答案 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");