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