• 1401/06/01

کار نکردن SaveChange() در EFCore در consoleapp :

سلام من با استفاده از کنسول و یک API میخوام در یک Table بانک تقریبا 900 رکورد رو ویرایش کنم و فقط قراره ستون Status اون رو از API بگیرمو وارد کنم. همه جای کد داره درست کار میکنه وقتی در دیباگ میبینم. تک تک خط ها مقداری که میخوامو دارن انتقال میدن و کارشونو انجام میدن ولی وقتی به SaveChange میرسه انگار هیچ کاری نمیکنه! نه تو بانک اتفاقی میوفته نه زمانی که بهش یک var بدم. میبینم که اون Var مقدار صفر رو برمیگردونه که یعنی هیچ کاری انجام نشده!

قراره StatusTitle که از API جواب میگیرمو جلو همون ترمینال آی دی قرار بدم توی بانک که البته درست StatusTitle میاد میشینه توی item.status و پر میشه و آماده میشه برای SaveChange ولی خب...

Program.cs

Excel_DBContext context = new Excel_DBContext();
var excel = context.Sheets.Where(c=>c.Status==null).ToList();
CallWebAPIAsync().Wait();
async Task CallWebAPIAsync()
{
    using (var client = new HttpClient())
    {
    client.BaseAddress = new Uri("https://jamservice.pna.co.ir/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    Parameters countryList;
    string terminalId;
    string serial;
    HttpResponseMessage response;
     
    foreach (var item in excel)
    {
        terminalId = item.Terminal;
        serial = item.Serial;
        countryList = new Parameters() {TerminalID=terminalId, Serials=serial };
        response = await client.PostAsJsonAsync("services/api/RequestService/BindSerialToSwitch", countryList);

        var resultString = await response.Content.ReadAsStringAsync();

        var resultJson = JsonConvert.DeserializeObject<Excel>(resultString);
        Sheet findTerminal = context.Sheets.First(c=>c.Terminal==terminalId);
        if (response.IsSuccessStatusCode)
        {
            item.Status = resultJson.StatusTitle;
            context.SaveChanges();
            Console.WriteLine("Record " + terminalId + " Updated");
        }
        else
        {
            Console.WriteLine("Error");
        }
    }
}

DB Table:

public partial class Sheet
{
    public string? Terminal { get; set; }
    public string? Serial { get; set; }
    public string? Model { get; set; }
    public string? Status { get; set; }
}

کلاسی که برای کار با API ساختم:

public class Excel
{
    public string? Terminal { get; set; }
    public string? Serial { get; set; }
    public string? StatusTitle { get; set; }
}
  • 1401/06/02
  • ساعت 09:07

سلام دوست من وقتتون بخیر

دوست من قبل از اینکه SaveChange رو فراخونی کنید متد Update رو استفاده کنید و بعدش ایتمی که قرار اپدیت بشه رو بهش پاس بدین


  • 1401/06/02
  • ساعت 21:05

سلام وقت بخیر

ممنون از پاسختون، مشکل از اون نبود. خود ترمینال چون اعداد خاصی بودن من ستون آی دی نزاشتم و جدولم پرایمری کی نداشت. خود ترمینال رو PrimaryKey کردم و درست شد.

ممنون


  • 1401/06/02
  • ساعت 23:17

خواهش میکنم دوست من

خداروشکر مشکل رفع شد و ممنون بابت به اشتراک گذاری راه حل 

موفق باشید دوست من


logo-enamadlogo-samandehi