none
EF varbinary to base64 RRS feed

  • Soru

  • Core ile geliştirdiğim api de varbinary datamı cliente gönderirken sıkıntı yaşamaktayım. Aşağıda ki şekilde denediğimde 500 hatası alıyorum. Veri tipim varbinary(max). Ben bunu base64 olarak göndermek istiyorum. Nasıl yapabilirim?

                var res = db.Categories.Where(a => a.RestId == model.RestId)
                    .Select(a => new
                    {
                        a.CategoryId,
                        a.CategoryName,
                        a.CatQue,
                        a.RestId,
                        img = Convert.ToBase64String(a.Images)
                    }).ToList();
                return Ok(res);

    27 Temmuz 2020 Pazartesi 17:00

Yanıtlar


  • Bazı kategorilerde resim yok. Varbinary alanı null. Hata bu yüzden olabilir mi?

    evet ondan oluyor.

    Ama ben başka bişey önereyim; tabloya byte dizisi kaydediyorsun, her resmi göstereceğinde base64 stringe çeviriyorsun. Bunun yerine alanı varbinary yerine text yap, ilk kaydı oluşturduğunda bir kere base64 e çevirip koy, sonra bişeye çevirmeden defalarca  kullan.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    27 Temmuz 2020 Pazartesi 23:22
    Moderatör

Tüm Yanıtlar

  • SQL server da ToBase64 fonksiyonunun karşılığı yok, bu işlemi c# tarafında yapmalısınız. Select den önce ToArray() ekleyebilirsiniz araya.

    www.cihanyakar.com


    27 Temmuz 2020 Pazartesi 17:55
    Moderatör
  • Toarray ekledikten sonra yine selecti aynı şekilde mi kullanacağım? Bu şekilde deneyip yapamadım yine. Bir örnek verebilir misiniz?
    27 Temmuz 2020 Pazartesi 18:08
  • Evet aynı şekilde, fakat olmadıysa hata mesajını bizimle paylaşmanız gerekiyor. 500 sunucuda hata oldu demek ve hiç bir fikir vermiyor.

    www.cihanyakar.com

    27 Temmuz 2020 Pazartesi 18:59
    Moderatör
  • Evet aynı şekilde, fakat olmadıysa hata mesajını bizimle paylaşmanız gerekiyor. 500 sunucuda hata oldu demek ve hiç bir fikir vermiyor.

    www.cihanyakar.com

                var res = db.Categories.Where(a => a.RestId == model.RestId)
                    .AsEnumerable()
                .ToArray()
                .Select(a => new
                {
                    a.CategoryId,
                    a.CategoryName,
                    a.CatQue,
                    a.RestId,
                    img = Convert.ToBase64String(a.Images)
                }).ToList();
                return Ok(res);

    Bazı kategorilerde resim yok. Varbinary alanı null. Hata bu yüzden olabilir mi?

    • Düzenleyen Kenshai 27 Temmuz 2020 Pazartesi 20:05
    27 Temmuz 2020 Pazartesi 20:04

  • Bazı kategorilerde resim yok. Varbinary alanı null. Hata bu yüzden olabilir mi?

    evet ondan oluyor.

    Ama ben başka bişey önereyim; tabloya byte dizisi kaydediyorsun, her resmi göstereceğinde base64 stringe çeviriyorsun. Bunun yerine alanı varbinary yerine text yap, ilk kaydı oluşturduğunda bir kere base64 e çevirip koy, sonra bişeye çevirmeden defalarca  kullan.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    27 Temmuz 2020 Pazartesi 23:22
    Moderatör
  • AsEnumerable() ve ToArray()'ı beraber kullanmana gerek yok.  @Önay abiye katılıyorum. Fakat, Text yerine varchar(max) kullanmanı öneririm, çünkü "text" türü SQL Server'ın gelecek sürümlerinde aramızda olmayacak.


    www.cihanyakar.com

    28 Temmuz 2020 Salı 09:50
    Moderatör