C# 将对象添加到常规集合

C# 将对象添加到常规集合,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在努力实现以下目标 public void Add<T1, R> ( T1 entity, R virtualEntity ) { entity.Set<R>().Add( virtualEntity ); } 当然,教师将有教师。学生,但我不能用一般方法访问。我需要一种通用方法来访问给定类型的虚拟集。找到了解决方案 public void Add<T1, R> ( T1 entity, R vi

我正在努力实现以下目标

public void Add<T1, R> ( T1 entity, R virtualEntity )
        {
            entity.Set<R>().Add( virtualEntity );
        }
当然,教师将有
教师。学生
,但我不能用一般方法访问。我需要一种通用方法来访问给定类型的虚拟集。

找到了解决方案

 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 );
            }
        }

你不能使用
DbContext.Set(typeof(T1)).Add()
?一个
教师
班级如何拥有
DbSet
DbSet
s属于
DbContext
s。我不清楚你想要实现什么以及为什么。也许它不叫它,我说的是当你声明Teacher.Students时返回的集合,你可以称之为Add-on。好吧,这可能是一个
ICollection
,但即使如此,我也完全不清楚你为什么不直接做
Teacher.Students.Add(newStudent)
。让这个优步通用化有什么好处?这样我就可以在一个地方更改我使用它的所有领域。您知道获取这些ICollections的可能方法吗?
 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");