WCF 4.0을 사용하는 Entity Framework 4.0을 사용하는 DataContractSerializer 오류

.net entity-framework

문제

Entity Framework에서 WCF를 통해 개체 목록을 검색하려고하는데 다음과 같은 예외가 발생합니다.

매개 변수 http://tempuri.org/:GetAllResult 를 직렬화하는 중에 오류가 발생했습니다. 의 InnerException 메시지가 TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE '데이터 계약 이름' '유형'System.Data.Entity.DynamicProxies.TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE이었다 http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies '예상되지 않는다. DataContractResolver를 사용하거나 알려진 유형 목록에 정적으로 알려지지 않은 유형을 추가하십시오 (예 : KnownTypeAttribute 속성을 사용하거나 DataContractSerializer에 전달 된 알려진 유형 목록에 추가). 자세한 내용은 InnerException을 참조하십시오.

과거에는 WCF를 사용했지만 결코 Entity Framework에서는 사용하지 않았습니다. Entity Framework를 통해 생성 된 모든 엔티티를 가지며 [DataContract] 및 [DataMember] 특성이 주석됩니다. 내 엔티티에 내비게이션 등록 정보가 없습니다.

호출되는 GetAll () 메서드는 추상 서비스 클래스에 있습니다.

[ServiceContract]
public interface IService<T>
{
    [OperationContract]
    List<T> GetAll();
}

그리고 ChannelFactory를 사용하여 구현을 호출합니다.

Binding binding = new NetTcpBinding();
EndpointAddress endpointAddress = new EndpointAddress("net.tcp://localhost:8081/" + typeof(TestObjectService).Name);
using (ChannelFactory<ITestObjectService> channel = new ChannelFactory<ITestObjectService>(binding, endpointAddress))
{
    ITestObjectService testObjectService = channel.CreateChannel();
    testObjects = testObjectService.GetAll();
    channel.Close();
}

나는 그것을 다음과 같이 접대하고있다.

Type type = typeof(TestObjectService);
ServiceHost host = new ServiceHost(type,
            new Uri("http://localhost:8080/" + type.Name),
            new Uri("net.tcp://localhost:8081/" + type.Name));
host.Open();

디버깅을 사용하면 데이터베이스에서 개체를 찾지 만 개체를 반환하지 못합니다.

내가 잘못 될지도 모르는 어떤 생각?

수락 된 답변

이것은 알아낼 고통 이었지만 EntityFramework가 클래스의 '프록시'를 만들기 때문에 발생했습니다. 내가 가진 TestObject 클래스는 올바르게 설정되었지만 호출 된 클래스를 생성하고있었습니다. TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE

ChannelFactory + WCF + Entity Framework을 모두 작동 시키려면 Context 생성자로 가서 다음을 추가해야합니다.

ContextOptions.ProxyCreationEnabled = false;

나는 이것이 다른 누군가를 돕기를 바랍니다.


인기 답변

Code First (EF 4.3) 용 DbContext API를 사용할 때 다음을 수행해야했습니다.

public class MyClass : DbContext
{
    public MyClass()
    {
        base.Configuration.ProxyCreationEnabled = false;
    }
}


Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow