none
Problema al añadir registro a una entidad con propiedades de navegación RRS feed

  • Pregunta

  • Buenas!

    Tengo un problema que no se cómo añadir un registro a una entidad con propiedades de navegación en el método Client. Os pongo lo que tengo hasta ahora a ver qué me podéis decir.

    Entidad:

    public class Template
        {
           
            public Template()
            {
                this.Objects = new HashSet<AMObject>();            
                this.Templates_Struct = new HashSet<Templates_Struct>();
                this.Templates_Struct1 = new HashSet<Templates_Struct>();
            }
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]        
            public int ID { get; set; }
            public Nullable<int> IDClient { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
            public string Ver { get; set; }
    
         
            public virtual ICollection<AMObject> Objects { get; set; }
    
            public virtual ICollection<Templates_Struct> Templates_Struct { get; set; }
          
            public virtual ICollection<Templates_Struct> Templates_Struct1 { get; set; }
            public virtual Templates_Properties Templates_Properties { get; set; }
        }


    Repository:

    public bool AddTemplateProperty (int idt, int idp, string defval)
            {
                using (var ctx = new DBAssetsContext())
                {
                    try
                    {
                        ctx.Templates_Properties.Add(new Templates_Properties { IDTemplate = idt, IDProperty = idp, DefaultValue = defval });
                        ctx.SaveChanges();
                        return true;
                    }
                    catch (Exception ex) { log.Error("No se puede añadir la TemplateProperty.", ex); return false; }
                }
            }

    Service:

    public bool AddTemplateProperty(int idt, int idp, string dv)
            {
                return te.AddTemplateProperty(idt, idp, dv); 
            }

    DTO:

    public class TemplateDTO
        {
            public int ID { get; set; }
            public int  IDClient { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }       
            public string Ver { get; set; }
            public ICollection<ObjectDTO> Objects { get; set; }
            public ICollection<TemplateStructDTO> Templates_Struct { get; set; }
            public ICollection<TemplateStructDTO> Templates_Struct1 { get; set; }       
            public IList<TemplatePropertyDTO> Templates_Properties { get; set; }
        }

    Controller:

    [HttpPost]
            [Route("Template/AddTemplateProperty")]
            public bool AddTemplateProperty(int idt, int idp, string dv)
            {
                return ts.AddTemplateProperty(idt, idp, dv);
            }

    Client: (Aquí viene el problema)

    public bool AddTemplateProperty(int idt, int idp, string dv)
            {
                string url = "Template/AddTemplateProperty";
                string content = "IDTemplete=" + idt + "&IDProperty=" + idp + "&DefaultValue=" + dv; 
                
                    HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, url);
                    //string cadena = JsonConvert.SerializeObject(obj);
                    //HttpContent content = new StringContent(cadena, Encoding.UTF8, "application/json");
                    //message.Content = content;
                    HttpResponseMessage response = client.SendAsync(message, content).GetAwaiter().GetResult();
    
                    if (response.IsSuccessStatusCode)
                    {
                        return response.Content.ReadAsAsync<bool>().GetAwaiter().GetResult(); ;
    
                    }
                    else
                    {
                        log.Error("Ha habido algún problema al añadir la Template Property (Client)");
                        return false;
                    }
                
            }

    Antes, sin el DTO, me lo hacía sin problema, pero ahora con el DTO, no se como hacerlo. Este ejemplo de Client lo ví por internet para pasarle los parámetros tipo querystring, pero en la línea

    HttpResponseMessage response = client.SendAsync(message, content).GetAwaiter().GetResult();

    me dice que no se puede convertir de string a CancellationToken.

    Comentar también que esa línea la tengo que poner así porque si pongo:

    HttpResponseMessage response = await client.SendAsync(message);

    me da error.

    Alguna idea de cómo puedo hacer el método Client con el DTO??

    Gracias por adelantado


    jueves, 5 de julio de 2018 11:58