5
DbContext에서 상속받은 AccessData라는 클래스의 인스턴스가 있습니다. 그래서 ... 반사를 사용리플렉션을 사용하여 이미 존재하는 개체의 Field 메서드를 호출하십시오.
public class AccessData : DbContext
{
public DbSet<apps_Apps> apps_AppsList;
public DbSet<apps_AppsOld> apps_AppsOldList;
...
//Several other DbSet<> properties
}
, 나는 이런 식의 AccessData 객체에서 이러한 DbSet 호텔 중 한 곳 식별 한 ... 엔터티 프레임 워크 코드 첫 문맥 클래스이며, 다음과 같습니다
var listField = accessData.GetType().GetField(typeName + "List");
이제이 DbSet 속성에 개체를 추가 할 수 있어야합니다.
DbSet 필드를 나타내는 FieldInfo 개체 만 있으면 AccessData 개체에서이 특정 필드의 Add 메서드를 호출하고 개체를 전달하는 방법은 무엇입니까?
또는 다른 말로하면 어떻게 다음을 호출합니까?
accessData.<FieldInfoType>.Add(obj);
희망적입니다. 당신이 있다면
addMethod.Invoke(fldVal, new object[] { obj });
을 또는 :
object fldVal = listField.GetValue(accessData);
당신이 호출 할 방법에 대한 MethodInfo
받기 :
MethodInfo addMethod = fldVal.GetType().GetMethod("Add", new Type[] { typeof(obj) });
을 그리고 그것을 호출
GetValue는 fieldInfo가 참조하는 개체에 대한 참조를 반환하기 때문에 이렇게 작동합니까? 나는 GetValue가 객체 자체가 아닌 값을 방금 반환했다는 것을 이름에서 추측했다. –
@MatthewLock - 당신이 얻길 기대하는 _ 가치를 이해하고 있는지 잘 모르겠습니다. 'GetValue()'는 필드를 역 참조하는 것으로 정상적으로 반환되는 것을 반환합니다 (예 :'fldVal = obj.ListField;') –
왜 이해가 안되나요? 반환 값 객체에서 GetType 값을 반환 한 객체에 methodInfo를 가져온 다음 Invoke를 사용하여 객체의 인스턴스에 도달합니다. 그렇게 잘 작동하는 것은 좋지만 이상하게 보입니다. –