Korzystanie z NopCommerce 3.8, Visual Studio 2015 proff.Nopcommerce Update podmiot issue
Utworzyłem wtyczkę, która jest odpowiedzialna za nawiązywanie spokojnych połączeń z moim interfejsem API sieci Web, który udostępnia inną bazę danych niż Nop.
Proces jest wykonywany za pomocą polecenia Nop, pomyślnie odzyskuje dane i mogę wykonać i manipulować, jak widzę, bez problemów do tej pory.
Problem pojawia się, gdy próbuję zaktualizować rekord w tabeli produktów, wykonuję aktualizację ... ale nic się nie dzieje, nie zmienia się, nie ma błędu.
Uważam, że dzieje się tak z powodu kontekstu, który nie ma pojęcia o moim nowo utworzonym obiekcie produktu, jednak rysuję puste miejsce na temat tego, co muszę zrobić w odniesieniu do mojego konkretnego przykładu.
Podobne pytania zwykle odnoszą się do obiektu "model", który jest częścią parametru wywołania metody, "model" ma metodę ToEntity
, która wydaje się być odpowiedzią na podobne pytanie w stosie.
Jednak mój przykład nie ma klasy/metody ToEntity
prawdopodobnie dlatego, że mój parametr jest w rzeczywistości listą produktów. Aby wyjaśnić tutaj mój kod.
Sposób RestClient.cs
public async Task<List<T>> GetAsync()
{
try
{
var httpClient = new HttpClient();
var json = await httpClient.GetStringAsync(ApiControllerURL);
var taskModels = JsonConvert.DeserializeObject<List<T>>(json);
return taskModels;
}
catch (Exception e)
{
return null;
}
}
metoda w moim klasy usługi
public async Task<List<MWProduct>> GetProductsAsync()
{
RestClient<MWProduct> restClient = new RestClient<MWProduct>(ApiConst.Products);
var productsList = await restClient.GetAsync();
InsertSyncProd(productsList.Select(x => x).ToList());
return productsList;
}
private void InsertSyncProd(List<MWProduct> inserted)
{
var model = inserted.Select(x =>
{
switch (x.AD_Action)
{
case "I":
//_productService.InsertProduct(row);
break;
case "U":
UpdateSyncProd(inserted);
.....
Następnie metoda wiązania i aktualizować
private void UpdateSyncProd(List<MWProduct> inserted)
{
var me = inserted.Select(x =>
{
var productEnt = _productRepos.Table.FirstOrDefault(ent => ent.Sku == x.Sku.ToString());
if(productEnt != null)
{
productEnt.Sku = x.Sku.ToString();
productEnt.ShortDescription = x.ShortDescription;
productEnt.FullDescription = x.FullDescription;
productEnt.Name = x.Name;
productEnt.Height = x.Pd_height != null ? Convert.ToDecimal(x.Pd_height) : 0;
productEnt.Width = x.Pd_width != null ? Convert.ToDecimal(x.Pd_width) : 0;
productEnt.Length = x.Pd_depth != null ? Convert.ToDecimal(x.Pd_depth) : 0;
productEnt.UpdatedOnUtc = DateTime.UtcNow;
}
//TODO: set to entity so context nows and can update
_productService.UpdateProduct(productEnt);
return productEnt;
});
}
Jak widać, otrzymuję dane i przekazuję dane do pewnej metody na podstawie wyniku. Z tej listy w metodzie I iteruje i pobiera jednostkę z tabeli, a następnie aktualizuje za pośrednictwem usługi produktu za pomocą tej zmanipulowanej jednostki.
Więc czego mi tu brakuje, jestem pewien, że jest to 1 krok, i myślę, że może być albo dlatego, że 1) Kontekst wciąż nie ma pojęcia o danej jednostce, lub 2) Jej nieprawidłowe połączenia.
Podsumowanie Aktualizacja nie jest aktualizowana, prawdopodobnie z powodu braku wiedzy lub mojej metodologii jest nieprawidłowa. (prawdopodobnie oba).
UPDATE:
dodałem niektóre logger.inertlog
dookoła moich usług, to przebiega w porządku, wszystko do punktu wywołania aktualizacji. Ale znowu sprawdzam produkt i nic się nie zmieniło w sekcji administratora.
mam pod warunkiem pełnego źródła, jak myślę, że może to ma coś wspólnego z resztą instalacji kodu ewentualnie?
UPDATE:
dodawali następujący dla sprawd na mojego wykonania metody.
var myprod = _productRepos.GetById(4852);
myprod.ShortDescription = "db test";
productRepos.Update(myprod);
Pomyślnie aktualizuje opis produktu. Przeniosłem moje metody z mojej usługi do klasy zadań, ale wciąż nie miałem szczęścia. Im więcej na to patrzę, tym bardziej myślę, że mój asynchronizm w jakiś sposób zabija kontekst db.
Hej, czy bezpośrednio sprawdziłeś bazę? zmiany wyświetlające się tam? –
Tak, zmiany nio zostały zaktualizowane, więc nie sądzę, że jest to problem z pamięcią podręczną, ale kto wie, – lemunk
OK, kod wygląda dobrze, musisz zbadać więcej. –