当前位置: 首页 > 编程语言 > C#

循环派生的DbContext DbSets,这样我就可以在我的DbContext对象中添加一个ClearAll()扩展分享

时间:2023-04-11 11:08:26 C#

C#学习教程:LoopderivedDbContextDbSetssoIcanaddaClearAll()extensiontomyDbContextobjectIsGenericTypeDefinition][1],我得到了我丢失的信息,以便能够通过反射检索DbContext的DbSet。但是,我现在被困在别处。在下面的代码示例中,我确实成功获得了DbSetgenerics实例,但我现在希望能够在编译时将它们转换为特定的泛型类型定义。dbSet是我的DbContext中DbSet之一的真实实例,但如何将其转换为真实类型定义?(在第一个循环迭代中,dBSet将代表DbSet-我如何在编译时为此变量强制执行此类型?更新:我刚刚回顾了我正在尝试做的事情......恐怕它没有意义/这是不可能的。由于真正的类型只在运行时发现,所以在那之前我无法关联到真正的通用类型(并且编译时间是之前的某个阶段)。无论如何-我真正感兴趣的是也就是说,在编译时,IDE显示IEnumerable成员(DbSet实现它)。所以我真的需要将它转换为DbSet。这样的演员怎么样?可能吗?!privatestaticvoidMain(string[]args){MyDbmyDb=newMyDb();列表dbSetProperties=myDb.GetType().GetProperties().Where(pi=>pi.PropertyType.IsGenericType&&string.Equals(pi.PropertyType.GetGenericTypeDefinition().FullName,typeof(DbSet).FullName,StringComparison.OrdinalIgnoreCase)).ToList();foreach(PropertyInfodbSetPropertyindbSetProperties){Type[]typeArguments=dbSetProperty.PropertyType.GetGenericArguments();输入dbSetGenericContainer=typeof(DbSet);输入dbSetGenericType=dbSetGenericContainer.MakeGenericType(typeArguments);对象dbSet=Convert.ChangeType(dbSetProperty.GetValue(myDb),dbSetGenericType);}}publicclassMyDb:DbContext{publicDbSetA{get;放;}publicDbSetB{get;放;}publicvoidClearTables(){}}publicclassA{publicstringaaa{get;放;}公共列表myList{得到;放;}}publicclassB{publicintMyInt{get;放;}}DbSet本身不是一个类型;你的问题实实际上没有意义。不过,幸运的是,DbSet实现了非泛型DbSet基类,因此您可以使用它。以上就是C#学习教程:loopderivedDbContextDbSets,这样我就可以为我的DbContext对象添加一个ClearAll()扩展来共享所有的内容。如果对大家有用,需要了解更多C#学习教程,希望大家注意——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: