2017-09-08 3 views
0

J'ai déjà créé une méthode utilisateur de registre de travail dans laquelle un utilisateur est enregistré dans la base de données. J'ai également créé une nouvelle méthode de paquetage qui crée un nouveau paquet. Ils fonctionnent tous les deux bien cependant quand un utilisateur est créé son type de compte est défini sur null, je veux simplement définir les utilisateurs "accountType" pour être le "PackageName".Impossible de définir une valeur d'un modèle à un autre en utilisant une méthode "Put" dans Postman

Package Modèle:

public class Packages 
    { 
     public int Id { get; set; } 
     public string PackageName { get; set; } 
     public int OrderLimit { get; set; } 
     public decimal Cost { get; set; } 
     public string ResetIntervalType { get; set; } 
     public int ResetInterval { get; set; } 
} 

Modèle utilisateur:

public class AppUser : IdentityUser 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string AccountType { get; set; } 
     public int? PeriodOrderQty { get; set; } 
     public int? TotalOrderQty { get; set; } 
     public Guid? APIKey { get; set; } 
     //added packages foreign key, connection established 
     public Packages Package { get; set; } 
     public Cities City { get; set; } 
     public QualificationLevels Qualifications { get; set; } 

    } 

Voici la méthode de vente je tente de mettre en œuvre, après la pause pointant vers chaque composant le principal problème est le cartographe étant fixé à le début de la méthode. Cependant, je ne sais pas quoi d'autre à essayer, seulement commencé à utiliser ce genre de méthodes.

[HttpPut("api/auth/assignpackage/{id}")] 
      public async Task<IActionResult> AssignPackage(int id ,[FromBody]Packages packageAssignValue) 
      { 
       try 
       { 
        var assignPackage = packageAssignValue; 
        var assignUser = Mapper.Map<Packages, AppUser>(packageAssignValue); 
        assignUser.AccountType = packageToEdit.PackageName; 

        var packageToEdit = await _context.Packages 
         .AsNoTracking() 
         .SingleOrDefaultAsync(m => m.Id == id); 

        assignUser.AccountType = assignPackage.PackageName; 

        if (packageToEdit == null) 
        { 
         return NotFound("Could not update Package as it was not Found"); 
        } 
        else 
        { 
         _context.Update(assignUser); 
         await _context.SaveChangesAsync(); 
         return Ok(assignUser); 

        } 
       } 
       catch (DbUpdateException) 
       { 
        //Log the error (uncomment ex variable name and write a log.) 
        ModelState.AddModelError("", "Unable to save changes. " + 
         "Try again, and if the problem persists, " + 
         "see your system administrator."); 
        return NotFound("Package not found"); 
       } 
      } 

Pour référence ici est mon entrée postier:

{ 
     "packageName": "Bronze" 
} 
+0

Comment définit-il la propriété Package de AppUser aux packages? –

+0

Il ne fait pas qu'il jette simplement une erreur d'exception AutoMapper, je pense que je peux essayer d'implémenter cela dans le mauvais sens. Mais je sais que le mappeur ne définit pas la propriété de package sur une propriété AppUser, ce qui est l'intention. Je veux qu'il atteigne cette ligne que j'ai oublié d'inclure: [assignUser.AccountType = packageToEdit.PackageName] – Bmanzr

+0

'Il ne fait pas qu'il lève simplement une erreur d'exception AutoMapper,' Veuillez mettre à jour votre poste avec les détails de cette exception. – mjwills

Répondre

0

résolu le problème en résolvant un problème mappeur automatique, mais une nouvelle erreur est apparue posé une autre question qui montre plus en détail sur la méthode mise à jour. `Mapper.Map` convertit les paquets en AppUser?