2016-10-21 9 views
7

Używanie bazy danych instancji MariaDb (fork MySql) i używanie Entity Framework Core, daj mi problem, którego nigdy wcześniej nie doświadczyłem, stąd ten wpis, ponieważ nie mam pojęcia co się dzieje, i mam nadzieję, że niektórzy z was mogli doświadczyć tego wcześniej.Wszystkie dane nie są wstawiane do instancji MySql przy użyciu Entity Framework Core

Problem

Weźmy następujący scenariusz. Mamy tabeli, która wygląda następująco

News 
------------------------------------- 
| Id   | int  | not null | 
| Title  | text  | not null | 
| Content  | longtext | not null | 
| Base64Image | blob  | null  | 
------------------------------------- 

Korzystanie z C#, jak moja aplikacja internetowa zbudowana jest w ASP.NET MVC rdzenia, utworzyć nową instancję News obiektu, po prostu tak:

public IActionResult New (NewsViewModel model) 
{ 
    using (var db = new DatabaseContext()) 
    { 
     var news = new News() 
     { 
      Title = model.Title, 
      Content = model.Content 
     }; 

     db.News.Add(news); 
     db.SaveChanges(); 
    } 
} 

Dokładnie tak, jak jestem przyzwyczajony do regularnych aplikacji ASP.NET MVC, i oczekiwałbym, że to zadziała dobrze. Oto jednak haczyk.

Wyświetlanie danych w wizualizerze danych (w tym przypadku przy użyciu HeidiSQL) Widzę, że ciąg znaków Content został skrócony. Pomyślałem, że może to być po prostu ustawienie w HeidiSQL, aby nie wyświetlać pełnego ciągu znaków, a jedynie liczbę znaków. Teraz, jeśli wycofam ten wpis z bazy danych, widzę, że ciąg IS ma tylko x ilość znaków długich, gdzie jako mój początkowy ciąg może być x * 5.

Daje mi to kilka problemów, ponieważ ciąg znaków Content jest skrócony, ale także jeśli użytkownik przesyła obraz, który mógłbym chcieć przekonwertować na ciąg base64. Te struny są zwykle długie (w zależności od danych oczywiście), a to również ZOSTANIE skrócone.

Jak wspomniano na samym początku tego postu: Nie mam absolutnie pojęcia, co się dzieje. Nigdy wcześniej nie spotkałem się z tym dziwnym problemem i nie mogę znaleźć sposobu na znalezienie rozwiązania.

Czy ktoś może podać pomocną dłoń i wyjaśnić mi, co się dzieje?

Przykłady treści strun

przed zapisaniem do dB (rzeczywisty ciąg chcę zapisać, wpisana frontend textarea)490 znaków

Lorem ipsum dolor sit amet, ne na virtute insolens menandri, in cum utamur diceret menandri, fastidii petentium explicari et cum. Ex saperet definiebas quaerendum pri. Ei sed alii alterum alienum, mei graeco meliore pertinax eu, nec cu propriae molestie. Id eum zril timeam, na błąd gloriatur consectetuer est, et vim ceteros assueverit. W pri ancillae ponderum, ius an vidit dicant laudem. Ei usu corpora officiis principes, offendit percipitur eos et, qui ne consetetur concludaturque.

Po zapisaniu w bazie danych (rzeczywisty ciąg jako pobranej postu zapisać)252 znaków

Lorem ipsum dolor sit amet, ne za virtute insolens menandri w cum utamur diceret menandri, fastidii petentium explicari et cum. Ex saperet definiebas quaerendum pri.Ei sed alii alterum alienum, mei grecko meliore Pertinax eu, propriae NEC cu molestować

EXTRA

Wygląda na to, że to konsekwentnie około 235-260 znaków, który jest faktycznie zapisane w bazie danych. Odpoczynek jest tylko złomowany. Miałem kilka przypadków (238 znaków, 243, 253, etc.)

NEWS MODEL

public class News 
{ 
    public int Id { get; set; } 

    [Display(Name = "Title", ResourceType = typeof(Resources.General))] 
    public string Title { get; set; } 

    [Display(Name = "Content", ResourceType = typeof(Resources.General))] 
    public string Content { get; set; } 

    public DateTime CreateDate { get; set; } 

    [Display(Name = "ThumbnailImage", Description = "NewsThumbnailImageDescription", ResourceType = typeof(Resources.General))] 
    public string Base64ThumbnailImage { get; set; } 

    [Display(Name = "HeaderImage", Description = "NewsHeaderImageDescription", ResourceType = typeof(Resources.General))] 
    public string Base64HeaderImage { get; set; } 

    public string UserProfileUserName { get; set; } 

    public UserProfile UserProfile { get; set; } 
} 

DB TABELA

enter image description here

+2

Czy ostatnio zmienić typ danych pola w bazie danych? –

+1

@RossBush Myślałem o tym samym, potencjalnie używanym jako TINYTEXT? –

+1

Czy możemy zobaczyć cały model "Wiadomości"? Powinna istnieć wygenerowana klasa i być może częściowa. –

Odpowiedz

3

rozwiązanie tymczasowe

W obecnym stanie, oficjalna biblioteka MySql.EntityFramework.Core dla ASP.NET MVC Core nie działa poprawnie i jest to błąd. Po przejściu na wersję społecznościową: Pomelo.EntitytFramework.Core wszystko działa jak czar. Ten zrobił to dla mnie.

można znaleźć repozytorium Pomelo here

+1

Bardzo polecam pakiet z Pomelo. Po przejściu na ten pakiet mogłem usunąć niektóre obejścia, których musiałem użyć. –

Powiązane problemy