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
Czy ostatnio zmienić typ danych pola w bazie danych? –
@RossBush Myślałem o tym samym, potencjalnie używanym jako TINYTEXT? –
Czy możemy zobaczyć cały model "Wiadomości"? Powinna istnieć wygenerowana klasa i być może częściowa. –