Sử dụng NopCommerce 3.8, Visual Studio 2015 proff.Vấn đề thực thể Cập nhật Nopcommerce
Tôi đã tạo một plugin có trách nhiệm thực hiện các cuộc gọi an toàn đến API web của tôi hiển thị một DB khác với Nop.
Quá trình này được thực hiện thông qua một nhiệm vụ nop, nó kéo thành công dữ liệu trở lại và tôi có thể bước qua và thao tác như tôi thấy phù hợp, không có vấn đề cho đến nay.
Sự cố xảy ra khi tôi cố cập nhật bản ghi trên bảng sản phẩm, tôi thực hiện cập nhật ... nhưng không có gì xảy ra không thay đổi, không có lỗi.
Tôi tin rằng điều này là do bối cảnh không có ý tưởng về đối tượng sản phẩm mới được tạo ra của tôi, tuy nhiên tôi vẽ một khoảng trống trên những gì tôi cần làm liên quan đến ví dụ cụ thể của mình.
Các câu hỏi tương tự thường tham chiếu đối tượng "mô hình" là một phần của tham số của cuộc gọi phương thức, "mô hình" có phương thức ToEntity
có vẻ là câu trả lời trong câu hỏi tương tự trong ngăn xếp.
Tuy nhiên, ví dụ của tôi không có lớp học/phương pháp ToEntity
có thể do tham số của tôi thực sự là danh sách sản phẩm. Để làm rõ ở đây mã của tôi.
Phương pháp trong 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;
}
}
Phương pháp trong Service Class tôi
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);
.....
Sau đó, phương pháp này để ràng buộc và cập nhật
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;
});
}
Vì vậy, như bạn có thể thấy, tôi nhận dữ liệu và chuyển dữ liệu qua phương thức nhất định dựa trên kết quả. Từ danh sách đó trong phương thức I lặp lại, và kéo thực thể ra khỏi bảng, sau đó cập nhật thông qua dịch vụ sản phẩm bằng cách sử dụng thực thể thao tác đó.
Vì vậy, những gì tôi thiếu ở đây, tôi chắc chắn 1 bước của nó, và tôi nghĩ rằng nó có thể là do 1) Bối cảnh vẫn không có ý tưởng về các thực thể trong câu hỏi, hoặc 2) Các cuộc gọi không chính xác của nó.
Tóm tắt Cập nhật không cập nhật, có thể do ngữ cảnh không có kiến thức HOẶC phương pháp của tôi sai. (có lẽ cả hai).
UPDATE:
tôi đã thêm một số logger.inertlog
tất cả xung quanh dịch vụ của tôi, nó chạy qua tốt, tất cả đến mức tiếng gọi của bản cập nhật. Nhưng một lần nữa tôi kiểm tra sản phẩm và không có gì thay đổi trong phần quản trị.
tôi đã cung cấp nguồn đầy đủ như tôi nghĩ rằng có lẽ đây có cái gì để làm với phần còn lại của thiết lập đang thể?
UPDATE:
gia tăng sau cho testin trên thực hiện phương pháp của tôi.
var myprod = _productRepos.GetById(4852);
myprod.ShortDescription = "db test";
productRepos.Update(myprod);
Điều này mô tả thành công mô tả sản phẩm. Tôi đã chuyển các phương thức từ dịch vụ của mình sang lớp nhiệm vụ nhưng vẫn không có may mắn. Tôi càng nhìn vào nó càng nghĩ rằng async của tôi đang giết chết bối cảnh db bằng cách nào đó.
Xin chào, Bạn đã kiểm tra cơ sở dữ liệu trực tiếp chưa? thay đổi hiển thị trên đó? –
Có, nio thay đổi nơi cập nhật vì vậy tôi không nghĩ rằng nó là một vấn đề bộ nhớ cache, mặc dù những người hiểu biết – lemunk
Được rồi, mã có vẻ tốt, cần phải điều tra thêm. –