Quais são os passos para ler um objeto de um serviço de dados ADO.net?
-
06-07-2019 - |
Pergunta
Eu sou novo para ADO.net serviços de dados (e .net em geral também ..), estou tendo esse projeto onde eu preciso configurar um serviço de dados para ler e escrever para um banco de dados com nHibernate, I 've criou o serviço:
[WebGet]
[SingleResult]
public Factory Factories(int Id)
{
try
{
Factory[] results = this.CurrentDataSource.Session.Linq<Factory>().Where(g => g.Id.Equals(Id)).ToArray();
return results[0];
}
catch (Exception ex)
{
throw ex;
}
E eu criei um teste para o serviço:
[Test]
public void CanReadFactoryDataService()
{
DataServiceContext ctx = new
DataServiceContext(new Uri("http://localhost:1413/DataService.svc"));
var Factories = ctx.Execute<Factory>(
new Uri("Factories?Id=54", UriKind.Relative));
Assert.IsNotNull(Factories);
Factory factory = Factories.First<Factory>();
{
Console.WriteLine(factory.NAME);
}
Quando eu executar o serviço com o navegador (por exemplo: http: // localhost: 1413 / DataService.svc / Fábricas Id = 54 ), o serviço retorna:?
<Factories p1:type="ADODS.Core.Factory">
<FactorY_CODE>abc</FactorY_CODE>
<NAME>Nameds</NAME>
<ADDRESS>Reinhardt strasse</ADDRESS>
<COMPENSATION_MODEL p1:null="true"/>
<B_CODE p1:null="true"/>
<Id p1:type="Edm.Int32">54</Id>
</Factories>
Mas quando eu executar o teste de unidade que estou recebendo essa exceção:
TestCase 'Tests.DataServicesTests.CanReadFactoryDataService'
failed: System.InvalidOperationException : La secuencia no contiene elementos (The sequence contains no elements)
en System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
H:\ADODS\tests\ADODS.Tests\ADODS.Web\DataServicesTests.cs(22,0): en Tests.DataServicesTests.CanReadFactoryDataService()
Eu depurado do projeto, de modo que os Ligações de teste para o serviço eo serviço retorna os dados, mas
é outra coisa lá qualquer coisa que eu deveria fazer para converter os dados XML para o objeto real quando eu recebê-lo?
Eu fiz um teste, com um objeto string
em vez de um Factory
e funcionou, o problema parece ser com minhas aulas. Am I faltando alguma coisa?
Solução
Finalmente, resolveu: Eu adicionei uma referência de serviço (Wich eu não tivesse feito), e mudou o teste para:
[Test]
public void CanReadFactoryDataService()
{
ServiceReference1.DataServiceContext ctx = new
ServiceReference1.DataServiceContext(new Uri("http://localhost:1413/DataService.svc"));
var factories= ctx.Execute<Factory>(
new Uri("Factories?Id=54", UriKind.Relative));
Assert.IsNotNull(factories);
Factory factory = factories.First<Factory>();
{
Console.WriteLine(factory.ADDRESS);
}
}
E agora ele passa o teste:
Reinhardt strasse
1 passed, 0 failed, 0 skipped, took 3.48 seconds (NUnit 2.5.2).
Agora, eu acho que foi fácil, mas quando você não sabe, é difícil ...