2017-09-02 1 views
1

J'appelle une API Web et enregistre les enregistrements sur la base de données via le contrôleur, je veux à chaque fois im appeler l'API pour vérifier si l'enregistrement existe dans la base de données si oui alors ne sauvegardez pas, sinon sauvegardez.Vérification des enregistrements existants dans la base de données quand j'appelle web api

var client = new WebClient(); 
     var text = client.DownloadString("https://www.test.com/api/all-users?name=testusername%20&pass=334432"); 
     var wclients = JsonConvert.DeserializeObject<dynamic>(text); 
     List<apicli> list1 = new List<apicli>(); 
     var clie = new apicli(); 


     if (wclients.message == "success") 
     { 
      var data = wclients.data; 
      //var account = wclients.account; 
      ViewBag.test = data; 

      foreach(var item in ViewBag.test) 
      { 

       clie.Email = item.email; 
       clie.Name = item.name; 
       clie.Aff = item.affiliated_id; 

       foreach(var item1 in @item.account.real) 
       { 
        clie.Login = item1.login; 
        clie.password = item1.pass; 

       } 
       list1.Add(clie); 
       db.apiclis.AddRange(list1); 
       db.SaveChanges(); 
      }; 
     } 
+0

Cela ne devrait pas être une tâche pour le côté client mais pour le côté api de réception. L'API doit vous renvoyer une erreur si le doublon existe et vous devez gérer l'erreur en conséquence. Une partie de la considération sur la logique, je voudrais également souligner le fait que pour tester l'existence de l'enregistrement, vous avez besoin de deux appels au lieu d'un. – Steve

+0

Je ne peux pas modifier l'API de sorte que la seule façon de le faire est le côté client. J'ai besoin de vérifier avec ma base de données locale si un enregistrement existe ou non. –

Répondre

2

Je présume que vous avez besoin quelque chose comme ça, même si vous devez vérifier quel est l'identifiant unique de chaque enregistrement:

foreach(var item in data){ 
      var c = new apicli { 
       Email = item.email, 
       Name = item.name, 
       Aff = item.affiliated_id 
       Login = item.account.real.LastOrDefault()?login??"", 
       Login = item.account.real.LastOrDefault()?pass??"" 
      } 
      if(!db.apiclis.Any(a => a.Email == c.Email && a.Name == c.Name && a.Aff == c.Aff)){ 
       db.apiclis.Add(c); 
      } 
     } 

Ici, je suppose que le courrier électronique + nom + aff = identificateur unique.