2011-02-03 8 views
1

를 사용하여 엔티티 프레임 워크 객체의 인스턴스를 만들 수 없습니다 : 전에이 코드를 사용했다내가 반사 사용하여 엔티티 프레임 워크 객체의 인스턴스를 만들려고하고 반사

var type = Type.GetType("MyAssembly.MyEntityNamespace.MyEntity"); 
var target = Activator.CreateInstance(t); 

를하고 일반 "에서 큰 일을 항상하고있다 "개체를 사용하지만이 솔루션의 EF 개체에 사용할 경우 GetType()은 null을 반환합니다. 내 EF 모델은 자체 프로젝트에 있으며이 코드는 자체 테스트 어셈블리에서 실행됩니다. 테스트 어셈블리 을 참조하여 EF 어셈블리를 참조하고 EF 어셈블리는/bin에 있습니다.

나는 일반적으로 EF 클래스의 인스턴스를 만들 수 있지만 반사에서조차 시도는 작동하지 않습니다

var item = new MyEntity();    //works fine 
Type.GetType(item.GetType().FullName); //null 
Type.GetType(item.GetType().Name);  //null 

잘 모르겠어요 이것이 EF 일 또는 프로젝트 참조 일 경우. 리플렉션없이 객체를 그렇게 쉽게 만들 수있을 때 간단한 반사를 사용하여이 객체의 새 인스턴스를 만들 수없는 이유는 무엇입니까?

답변

3

EF 컨텍스트가 다른 어셈블리에 있기 때문에 네임 스페이스 및 typename이 아닌 어셈블리 한정 이름을 제공해야합니다. 당신이 System.Web를 사용하는 경우 더 쉽게 자신의 이름에 따라 클래스를 식별하기위한 몇 가지 유틸리티가있는 BuildManager 클래스도있다,

"MyAssembly.MyEntityNamespace.MyEntity, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" 

:

조립 자격을 갖춘 이름은 다음과 같이 보입니다

Type type = BuildManager.GetType("MyAssembly.MyEntityNamespace.MyEntity", false, true); 
+1

http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx – Reddog

+0

이제는 언급 한 것이 분명해 보입니다. 나는 그것을 한 발씩주고 조금 후에 대답 할 것이다. – Jeff

+0

그게 전부 였어. 버전, 문화권 및 공개 키 토큰을 가진 정규화 된 이름이 아니지만 'MyAssembly.MyNamespace.MyEntity, MyAssembly'가 작동했습니다. 정말 고마워! – Jeff