程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用反射遍历类型 T 层次结构的未知对象,获取所有类类型,然后使用 C# 将它们添加到 EF 核心 DbContext?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何使用反射遍历类型 T 层次结构的未知对象,获取所有类类型,然后使用 C# 将它们添加到 EF 核心 DbContext??

开发过程中遇到如何使用反射遍历类型 T 层次结构的未知对象,获取所有类类型,然后使用 C# 将它们添加到 EF 核心 DbContext?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用反射遍历类型 T 层次结构的未知对象,获取所有类类型,然后使用 C# 将它们添加到 EF 核心 DbContext?的解决方法建议,希望对你解决如何使用反射遍历类型 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,请注明来意。