2017-06-09 15 views
1

Xamarinで作業していますが、Entity Frameworkを使用するWebAPIがあります。そう基本的に、私は以下のように、仕事をする3つのテーブルを持って、私はすでにWebサービスに携帯電話から画像を送信することができますが、私は正確にすべての関係をデータベースにレコードを作成します:ASP.NET MVC Imageエンティティフレームワークを使用してデータベースにアップロードしてレコードを作成します

  1. 画像
  2. OccurenceImage
  3. 出現

Model Diagram

私のWebAPIには2つのコントローラーがあり、1つは画像のアップロードを処理し、もう1つはOccurencesを処理するコントローラーです。私はOccurenceImageのレコードを作成するときにカスタムIDを設定しようとしましたが、動作しません。

ImageUploadController.cs

[HttpPost] 
     public HttpResponseMessage UploadImage(string imageName) 
     { 
      var result = new HttpResponseMessage(HttpStatusCode.OK); 
      if (Request.Content.IsMimeMultipartContent()) 
      { 
       Request.Content.LoadIntoBufferAsync().Wait(); 
       Request.Content.ReadAsMultipartAsync(new MultipartMemoryStreamProvider()).ContinueWith((task) => 
       { 
        MultipartMemoryStreamProvider provider = task.Result; 
        foreach (HttpContent content in provider.Contents) 
        { 
         Stream stream = content.ReadAsStreamAsync().Result; 
         Image image = Image.FromStream(stream); 
         var testName = content.Headers.ContentDisposition.Name; 
         String filePath = HostingEnvironment.MapPath("~/Images/"); 
         string nameImg = imageName + Guid.NewGuid(); 
         String fullPath = Path.Combine(filePath, nameImg + ".jpg"); 
         image.Save(fullPath); 
         AddImageToDb(nameImg); 
        } 
       }); 

       return result; 
      } 
      else 
      { 
       throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted")); 
      } 

     } 

     private void AddImageToDb(string imageName) 
     { 
      VisitDatabase.Image image = new VisitDatabase.Image() 
      { 
       urlImage = imageName + ".jpg" 
      }; 

      OccurenceImage occurenceImage = new OccurenceImage() 
      { 
       idOccurence = 18, 
       Image = image, 

      }; 
      db.Image.Add(image); 
      db.OccurenceImage.Add(occurenceImage); 
      db.SaveChanges(); 
     }


OccurenceController.cs

[ResponseType(typeof(ActiveCitizen))] 
     public IHttpActionResult PostOccurence(ActiveCitizen json) 
     { 
      Citizen citizen; 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 
      ActiveCitizen activeCitizen = json; 
      var query = (from c in db.Citizen 
       where c.ccbi == activeCitizen.NumDocument 
       select c.idCitizen).SingleOrDefault(); 
      Address address = new Address() 
      { 
       lat = 12, 
       lon = 12, 
       street = "Rua do Santuario", 
       postalCode = "4490-554", 
       locality = "Barcelos" 
      }; 


      OccurenceType occurenceType = new OccurenceType() 
      { 
       title = activeCitizen.Description,    
      }; 
      if (query == 0) 
      { 
       citizen = new Citizen() 
       { 
        ccbi = activeCitizen.NumDocument, 
        nif = activeCitizen.NIF, 
        Contact = new Contact() 
        { 
         name = activeCitizen.Name, 
         email = activeCitizen.Email, 
         phone = activeCitizen.Phone 
        }, 
        Address = address 
       }; 
      } 
      else 
      { 
       citizen = db.Citizen.Find(query); 
      }     

      Occurence occurence = new Occurence() 
      { 
       solved = 0, 
       occurenceDateTime = new DateTime(2017, 5, 23), 
       Address = address, 
       OccurenceType = occurenceType, 
       Citizen = citizen 
      }; 

      db.Address.Add(address); 
      db.OccurenceType.Add(occurenceType); 
      if (query == 0) 
      { 
       db.Contact.Add(citizen.Contact); 
       db.Citizen.Add(citizen); 
      }   
      db.Occurence.Add(occurence); 
      db.SaveChanges(); 
      return CreatedAtRoute("DefaultApi", new { id = occurence.idOccurence }, activeCitizen); 
     }


アドバンのおかげでce!

答えて

1

上記のコードは、正しい問題は、テーブルだけで使用可能にするために必要なidOccurenceImageアイデンティティ仕様が無効になったフィールドを、OccurenceImageと魅力のように働いていたように思えます。私はこれが初心者の問題のこの種の他の人々に役立つことを願っています!

関連する問題