如何使用反射将对象添加到现有列表
Posted
技术标签:
【中文标题】如何使用反射将对象添加到现有列表【英文标题】:How to add an object to an existing list using reflection 【发布时间】:2021-12-17 13:31:37 【问题描述】:使用 EntityFrameworkCore 连接到数据库,在创建所有表和 DbContext 的模型后,我创建了一个名为 myContext 的新对象,该对象具有 List 类型的属性(名称为 listName)。 我想创建一个新对象并将其添加到列表中。 一切正常,但最后一行代码:
myList.GetType().GetMethod("Add").Invoke(myList, new[] myObj);
抛出 System.Reflection.TargetInvocationException
类型的异常这是完整的代码:
private void AddNewObjectToThisList(string listName)
var myList = myContext.GetType().GetProperty(listName).GetValue(myContext);
var objType = myList.GetType().GetGeneric Arguments().Single();
var myObj = Activator.CreateInstance(objType);
myList.GetType().GetMethod("Add").Invoke(myList, new[] myObj);
【问题讨论】:
异常来自哪一行? myList 为空? 可以分享一下异常信息吗? 异常是:内部异常,InvalidOperationException:无法跟踪“列表类型”类型的实例,因为它没有主键 这与实体框架有关吗? 实际上 myList 是 DbSet 类型的(使用实体框架核心与数据库通信) 【参考方案1】:我想确定代码是否正确。它是。 问题是向表 (myList) 中插入一条新记录。 myList 应该有一个主键。分配一个键后问题就解决了。
【讨论】:
以上是关于如何使用反射将对象添加到现有列表的主要内容,如果未能解决你的问题,请参考以下文章