Quelles sont les étapes à suivre pour lire un objet à partir d'un service de données ADO.net?
-
06-07-2019 - |
Question
Je suis nouveau dans les services de données ADO.net (et .net en général aussi ..), ce projet me demande de configurer un service de données pour lire et écrire dans une base de données avec nHibernate avez créé le service:
[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;
}
Et j'ai créé un test pour le service:
[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);
}
Lorsque je lance le service avec le navigateur (par exemple, http: // localhost: 1413 / DataService.svc / Factories? Id = 54 ), le service renvoie:
<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>
Mais lorsque je lance le test unitaire, j'obtiens cette exception:
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()
J'ai débogué le projet, donc le test se connecte au service et le service renvoie les données, mais
y a-t-il autre chose que je devrais faire pour convertir les données XML en l'objet réel lorsque je les recevrai?
J'ai fait un test avec un objet string
à la place d'une Factory
et tout a fonctionné, le problème semble concerner mes classes. Est-ce que je manque quelque chose?
La solution
Enfin je l'ai résolu: J'ai ajouté une référence de service (ce que je n'avais pas fait) et modifié le test en:
[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);
}
}
Et maintenant, il passe le test:
Reinhardt strasse
1 passed, 0 failed, 0 skipped, took 3.48 seconds (NUnit 2.5.2).
Maintenant, je pense que c'était facile, mais quand vous ne savez pas, c'est difficile ...