大佬教程收集整理的这篇文章主要介绍了如何使用反射遍历类型 T 层次结构的未知对象,获取所有类类型,然后使用 C# 将它们添加到 EF 核心 DbContext?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个与 EF Core 一起使用的通用函数,重要的是 setAddedState,我对 EF Core 的解决方法并不真正感兴趣,但对如何将通用树递归发送到此语句并不感兴趣:
context.Entry(entity).State = EntityState.Added;
其中实体是从未知对象递归获取的,该对象可能包含其他对象和直接对象后代的列表:
public async Task<T> CreateGraph(T entity) {
using (AppDbContext context = _contextFactory.createdbContext()) {
setAddedState(context,entity);
}
return entity;
}
// this method does not work:
private voID setAddedState(AppDbContext context,object entity) {
// entity object is the root of the tree,contains many sub objects and List<OtherObjects>
context.Entry(entity).State = EntityState.Added;
Console.Writeline("entry added");
foreach (FIEldInfo fIEldInfo in entity.GetType().GetFIElds())
{
Console.Writeline($"prop name: {fIEldInfo.namE},prop type: {fIEldInfo.FIEldType.ToString()}");
if (fIEldInfo.FIEldType == typeof(List<>)){
foreach(var item in fIEldInfo.getValue())
{
setAddedState(context,entity);
}
}
setAddedState(context,fIEldInfo.GetValue(entity));
}
}
思路是从根遍历对象图树,手动添加到EF核心上下文对象中,前提是所有子对象都已经用DbSet添加到dbContext就可以了。 对象图如下所示:
Class1 c = new Class1(){ //root object is added
Prop1 = new Class2() { ...},//Class2 should be added to dbContext.
Prop2 = new List<Class3>{ ...},// each item in class3 List should be added to dbContext
Prop3 = "String" // value type is not to be added ofcourse
}
重点不仅在于 EF Core,还在于如何创建一个完全通用的函数并提取类型以用于类似示例,例如添加 EF Core。
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的如何使用反射遍历类型 T 层次结构的未知对象,获取所有类类型,然后使用 C# 将它们添加到 EF 核心 DbContext?全部内容,希望文章能够帮你解决如何使用反射遍历类型 T 层次结构的未知对象,获取所有类类型,然后使用 C# 将它们添加到 EF 核心 DbContext?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。