如何使用另一个模型的交易价值更新联系人的总价值

How can I update total values for a Contact with transaction value from another model

我有两个 sql 表,其中包含这两个模型

我很乐意为我的仪表板更新同一联系人的时间报告的同一联系人的供应商点数总和。如果仪表板上不存在该联系人,我很乐意创建一个新记录。

查看我的两个 类 附加仪表板和时间 sheet 以及示例中的索引页面。 但是我需要帮助如何编写它,因为我是新手。

// ===========================
// My class with total values
// ===========================
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace WorkCollaboration.Models
{
    public class ContactDashboard
    {
        [Key]
        [Display(Name = "Contact Id"), Required(ErrorMessage = "Contact Id Required")]
        public int ContactId { get; set; }
        [Display(Name = "Number of Customer Need Demands")]
        public decimal NumberofCusNeedDemands { get; set; }
        [Display(Name = "Number of Supplier Offerings")]
        public decimal NumberofTalentOfferings { get; set; }
        [Display(Name = "Number of Customer Platin Badges")]
        public int NumberofCusBadgesPlatin{ get; set; }
        [Display(Name = "Number of Customer Gold Badges")]
        public int NumberofCusBadgesGold{ get; set; }
        [Display(Name = "Number of Customer Silver Badges")]
        public int NumberofCusBadgesSilver{ get; set; }
        [Display(Name = "Number of Customer Bronze Badges")]
        public int NumberofCusBadgesBronze{ get; set; }
        [Display(Name = "Number of Customer Iron Badges")]
        public int NumberofCusBadgesIron{ get; set; }
        [Display(Name = "Number of Supplier Platin Badges")]
        public int NumberofSupBadgesPlatin{ get; set; }
        [Display(Name = "Number of Supplier Gold Badges")]
        public int NumberofSupBadgesGold{ get; set; }
        [Display(Name = "Number of Supplier Silver Badges")]
        public int NumberofSupBadgesSilver{ get; set; }
        [Display(Name = "Number of Supplier Bronze Badges")]
        public int NumberofSupBadgesBronze{ get; set; }
        [Display(Name = "Number of Supplier Iron Badges")]
        public int NumberofSupBadgesIron{ get; set; }
        [Display(Name = "Total Customer Points")]
        public decimal NumberofTotalCusPoints{ get; set; }
        [Display(Name = "Total Supplier Points")]
        public decimal NumberofTotalSupPoints{ get; set; }
        [Display(Name = "Average Customer Recession")]
        public int AverageofCusRecessions{ get; set; }
        [Display(Name = "Average Supplier Recession")]
        public int AverageofSupRecessions{ get; set; }
    }
}

//========================================
//My class with transaction values
//========================================

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace WorkCollaboration.Models
{
    public class TimeReport
    {
        [Key]
        [Display(Name = "Time Report Id"), Required(ErrorMessage = "Time Report Id Required")] 
        public int TimeReportId { get; set; }
        public int TimeReportCustomerNeedContactId { get; set; }
        [Display(Name = "Supplier Contact Id"), Required(ErrorMessage = "Supplier Contact Id 
        Required")]
        public int TimeReportSupplierTalentContactId { get; set; }
        [Display(Name = "Time Report Date"), Required(ErrorMessage = "Time Report Date Required")]
        public DateTime TimeReportDate { get; set; }
        [Display(Name = "Time Report Hours"), Required(ErrorMessage = "Time Report Hours Required")]
        public decimal TimeReportHours { get; set; }
        [Display(Name = "Time Report Text"), Required(ErrorMessage = "Time Report Text Required")]
        public string TimeReportText { get; set; }
        [Display(Name = "Time Report State"), Required(ErrorMessage = "Time Report State Required")]
        public string TimeReportState { get; set; }
        [Display(Name = "Supplier Points Value")]
        public decimal TimeReportSupContactPointValue { get; set; }

    }
}

我在我的索引页面中并希望始终更新以获取点值的总和

    [BindProperty]
    public TimeReport TimeReport { get; set; }
    public CustomerNeed CustomerNeed { get; set; }
    public SupplierTalent SupplierTalent { get; set; }
    public IList<Models.ContactDashboard> ContactDashboard { get;set; }
    
    public async Task OnGetAsync()
    {
            ContactDashboard = await _context.ContactDashboard.ToListAsync();

    // something like this 
    foreach field in TimeReport

    if (TimeReport.TimeReportSupplierTalentContactId = ContactDashboard.ContactId)
    {
        Update ContactDashboard Record
        ContactDashboard.NumberofTotalSupPoints = ContactDashboard.NumberofTotalSupPoints + 
        TimeReport.TimeReportSupContactPointValue
    }
    else 
    {
        Insert new Contact in ContactDashboard

        ContactDashboard.ContactId = TimeReport.TimeReportSupplierTalentContactId
        ContactDashboard.NumberofTotalSupPoints = ContactDashboard.NumberofTotalSupPoints + 
        TimeReport.TimeReportSupContactPointValue
    }
}

感谢您的帮助

更新 2.3.2021

我在问题上取得了进展,请参阅我的评论。

对我的模型的迭代也有效。如果缺少作品并更新,则创建一个记录。

查看我的代码

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.EntityFrameworkCore;
using NToastNotify;
using WorkCollaboration.Data;
using WorkCollaboration.Models;

namespace WorkCollaboration.Pages.ContactDashboardOverview
{
    public class DashboardModel : PageModel
    {
        private readonly WorkCollaboration.Data.WorkCollaborationContext _context;
        private readonly IToastNotification toastNotification;
        public DashboardModel(WorkCollaboration.Data.WorkCollaborationContext context, IToastNotification toastNotification)
        {
            _context = context;
            this.toastNotification = toastNotification;
        }



        [BindProperty]
        public IList<Models.ContactDashboardOverview> ContactDashboardOverview { get;set; }
        public IList<Models.Contact> Contact { get;set; }
        public IList<Models.TimeReport> TimeReport { get;set; }
        public Models.ContactDashboard ContactDashboard { get; set; }

        bool success_state;

        private bool CreatedNewDashboardContact(int Contactid)
        {
            ////============================================
            //// Adding new Dashboard Contact
            ////============================================
            var ContactDashboardAdd = new Models.ContactDashboard();
            ContactDashboardAdd.ContactId = Contactid;
            _context.ContactDashboard.Add(ContactDashboardAdd);
            _context.SaveChangesAsync();
            success_state = true;
            return success_state;
        }

        private bool UpdateExistingDashboardContact(int Contactid, decimal SupplierPoints)
        {
            ////============================================
            //// Updateing Dashboard Contact
            ////============================================
            var ContactDashboardUpdate = new Models.ContactDashboard();
            ContactDashboardUpdate.ContactId = Contactid;
            ContactDashboardUpdate.NumberofTotalSupPoints = SupplierPoints;


            _context.Attach(ContactDashboardUpdate).State = EntityState.Modified;

            try
            {
                _context.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ContactDashboardExists(ContactDashboardUpdate.ContactId))
                {
                    success_state = false;
                    return success_state;
                }
                else
                {
                    throw;
                }
            }
            success_state = true;
            return success_state;
        }

        private bool ContactDashboardExists(int id)
        {
            return _context.ContactDashboard.Any(e => e.ContactId == id);
        }



        public async Task OnGetAsync()
        {
            string SessionKeyName = "_Name";
            string SessionKeyId = "_Id";
            string SessionKeyDate = "_Date";
            string SessionKeyLang = "_Lang";

            DateTime now = DateTime.Now;
            string valueSystemKeyDates = now.ToString("yyyymmddhh:mm:ss");

            var SessionIdDate = HttpContext.Session.GetString(SessionKeyDate);
            var SessionIdId = HttpContext.Session.GetString(SessionKeyId);
            var SessionIdName = HttpContext.Session.GetString(SessionKeyName);
            var SessionIdLang = HttpContext.Session.GetString(SessionKeyLang);

            if (SessionIdId == "" | SessionIdId == null)
            {
                // Info
                toastNotification.AddInfoToastMessage("Sie sind nicht eingelogged");
                toastNotification.AddInfoToastMessage("You are not logged in");
                toastNotification.AddInfoToastMessage("Vous n'êtes pas connecté");
                RedirectToPage("/LogonService/LoginCreate");
            }
            
            //=========================================
            // Change Culture on specific user language
            //=========================================
            if (SessionIdLang == "DE")
            {
                var culture = CultureInfo.CreateSpecificCulture("de-CH");
                CultureInfo.DefaultThreadCurrentUICulture = culture;
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
                new CultureInfo("de-CH");
            }

            //=========================================
            // Change Culture on specific user language
            //=========================================
            if (SessionIdLang == "EN")
            {
                var culture = CultureInfo.CreateSpecificCulture("en-US");
                CultureInfo.DefaultThreadCurrentUICulture = culture;
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
                new CultureInfo("en-US");
            }

            //=========================================
            // Change Culture on specific user language
            //=========================================
            if (SessionIdLang == "FR")
            {
                var culture = CultureInfo.CreateSpecificCulture("fr-FR");
                CultureInfo.DefaultThreadCurrentUICulture = culture;
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
                new CultureInfo("fr-FR");
            }


            ContactDashboardOverview = await _context.ContactDashboardOverview.ToListAsync();
            Contact = await _context.Contact.ToListAsync();
            TimeReport = await _context.TimeReport.ToListAsync();


            foreach (var contactitem in Contact)
            {
                
                if (!ContactDashboardExists(contactitem.ContactId))
                {
                    // Create new
                    CreatedNewDashboardContact(contactitem.ContactId);
                }
            }



            foreach (var contactitem in Contact)
            {
                foreach (var timereportitem in TimeReport)
                {
                    if (contactitem.ContactId == timereportitem.TimeReportSupplierTalentContactId)
                    {
                        foreach (var dashboarditem in ContactDashboardOverview)
                        {
                            if (contactitem.ContactId == dashboarditem.ContactId)
                            {
                            
                                // Update because it is found
                                dashboarditem.NumberofTotalSupPoints = dashboarditem.NumberofTotalSupPoints +
                                                                       timereportitem.TimeReportSupContactPointValue;
                                UpdateExistingDashboardContact(dashboarditem.ContactId,
                                    dashboarditem.NumberofTotalSupPoints);
                            }
                        }
                    }
                }
            }





            //Success
            if (SessionIdLang == "DE")
            {
                toastNotification.AddSuccessToastMessage("Daten erfolgreich geladen");
            }
            if (SessionIdLang == "EN")
            {
                toastNotification.AddSuccessToastMessage("Data loaded successfully");
            }
            if (SessionIdLang == "FR")
            {
                toastNotification.AddSuccessToastMessage("Chargement des données réussi");
            }



        }
    }
}

但是我在循环槽时遇到了这个错误。在调试器中,我并不总是但有时会得到它。这在创建和更新时

谢谢帮忙

我有两个循环联系人在联系。在循环中,我正在更新我的仪表板。然后我有第二个循环更新下一个聚合值...

当我在第二次循环中尝试更新我的仪表板时,我收到有关实体实例已附加或无法跟踪的错误。

没有跟踪选项没有帮助,从异步切换到同步也没有帮助。从每个循环中放入新模型并没有帮助...

解决方案是将所有内容放在一个循环中,现在效果很好,正如我想要的那样。不幸的是,保持代码简单不再是真的。

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.EntityFrameworkCore;
using NToastNotify;
using WorkCollaboration.Data;
using WorkCollaboration.Models;

namespace WorkCollaboration.Pages.ContactDashboard
{
    public class CalcModel : PageModel
    {
        private readonly WorkCollaboration.Data.WorkCollaborationContext _context;
        private readonly IToastNotification toastNotification;

        public CalcModel(WorkCollaboration.Data.WorkCollaborationContext context, IToastNotification toastNotification)
        {
            _context = context;
            this.toastNotification = toastNotification;
        }

        [BindProperty] 
        public Models.ContactDashboard ContactDashboard { get; set; }
        public IList<Models.ContactDashboard> ContactDashboardList { get; set; }        
        public IList<Models.Contact> Contact { get; set; }
        public IList<Models.CustomerNeed> CustomerNeed {get; set; }
        public IList<Models.SupplierTalent> SupplierTalent { get; set; }
        public IList<Models.BadgesforCusContact> BadgesforCusContact { get; set; }
        public IList<Models.BadgesforSupContact> BadgesforSupContact { get; set; }
        public IList<Models.PointsforCusContact> PointsforCusContact { get; set; }
        public IList<Models.PointsforSupContact> PointsforSupContact { get; set; }
        public IList<Models.RatingfromSupContactToCusContact> RatingfromSupContactToCusContact { get; set; }
        public IList<Models.RatingfromCusContactToSupContact> RatingfromCusContactToSupContact { get; set; }
        public IList<Models.TimeReport> TimeReport { get; set; }

        public async Task<IActionResult> OnGetAsync()
        {
            string SessionKeyName = "_Name";
            string SessionKeyId = "_Id";
            string SessionKeyDate = "_Date";
            string SessionKeyLang = "_Lang";

            DateTime now = DateTime.Now;
            string valueSystemKeyDates = now.ToString("yyyymmddhh:mm:ss");

            var SessionIdDate = HttpContext.Session.GetString(SessionKeyDate);
            var SessionIdId = HttpContext.Session.GetString(SessionKeyId);
            var SessionIdName = HttpContext.Session.GetString(SessionKeyName);
            var SessionIdLang = HttpContext.Session.GetString(SessionKeyLang);

            if (SessionIdId == "" | SessionIdId == null)
            {
                // Info
                toastNotification.AddInfoToastMessage("Sie sind nicht eingelogged");
                toastNotification.AddInfoToastMessage("You are not logged in");
                toastNotification.AddInfoToastMessage("Vous n'êtes pas connecté");
                return RedirectToPage("/LogonService/LoginCreate");
            }

            //=========================================
            // Change Culture on specific user language
            //=========================================
            if (SessionIdLang == "DE")
            {
                var culture = CultureInfo.CreateSpecificCulture("de-CH");
                CultureInfo.DefaultThreadCurrentUICulture = culture;
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
                new CultureInfo("de-CH");
            }

            //=========================================
            // Change Culture on specific user language
            //=========================================
            if (SessionIdLang == "EN")
            {
                var culture = CultureInfo.CreateSpecificCulture("en-US");
                CultureInfo.DefaultThreadCurrentUICulture = culture;
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
                new CultureInfo("en-US");
            }

            //=========================================
            // Change Culture on specific user language
            //=========================================
            if (SessionIdLang == "FR")
            {
                var culture = CultureInfo.CreateSpecificCulture("fr-FR");
                CultureInfo.DefaultThreadCurrentUICulture = culture;
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
                new CultureInfo("fr-FR");
            }

            //Success
            if (SessionIdLang == "DE")
            {
                toastNotification.AddSuccessToastMessage("Daten erfolgreich geladen");
            }

            if (SessionIdLang == "EN")
            {
                toastNotification.AddSuccessToastMessage("Data loaded successfully");
            }

            if (SessionIdLang == "FR")
            {
                toastNotification.AddSuccessToastMessage("Chargement des données réussi");
            }

            return Page();
        }


        // To protect from overposting attacks, enable the specific properties you want to bind to, for
        // more details, see https://aka.ms/RazorPagesCRUD.
        public async Task<IActionResult> OnPost()
        {

            _context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;

            string SessionKeyName = "_Name";
            string SessionKeyId = "_Id";
            string SessionKeyDate = "_Date";
            string SessionKeyLang = "_Lang";

            DateTime now = DateTime.Now;
            string valueSystemKeyDates = now.ToString("yyyymmddhh:mm:ss");

            var SessionIdDate = HttpContext.Session.GetString(SessionKeyDate);
            var SessionIdId = HttpContext.Session.GetString(SessionKeyId);
            var SessionIdName = HttpContext.Session.GetString(SessionKeyName);
            var SessionIdLang = HttpContext.Session.GetString(SessionKeyLang);

            if (SessionIdId == "" | SessionIdId == null)
            {
                // Info
                toastNotification.AddInfoToastMessage("Sie sind nicht eingelogged");
                toastNotification.AddInfoToastMessage("You are not logged in");
                toastNotification.AddInfoToastMessage("Vous n'êtes pas connecté");
                RedirectToPage("/LogonService/LoginCreate");
            }

            //=========================================
            // Change Culture on specific user language
            //=========================================
            if (SessionIdLang == "DE")
            {
                var culture = CultureInfo.CreateSpecificCulture("de-CH");
                CultureInfo.DefaultThreadCurrentUICulture = culture;
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
                new CultureInfo("de-CH");
            }

            //=========================================
            // Change Culture on specific user language
            //=========================================
            if (SessionIdLang == "EN")
            {
                var culture = CultureInfo.CreateSpecificCulture("en-US");
                CultureInfo.DefaultThreadCurrentUICulture = culture;
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
                new CultureInfo("en-US");
            }

            //=========================================
            // Change Culture on specific user language
            //=========================================
            if (SessionIdLang == "FR")
            {
                var culture = CultureInfo.CreateSpecificCulture("fr-FR");
                CultureInfo.DefaultThreadCurrentUICulture = culture;
                CultureInfo.DefaultThreadCurrentCulture = culture;
                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
                new CultureInfo("fr-FR");
            }

            Contact = await _context.Contact.AsNoTracking().ToListAsync();
            ContactDashboardList = await _context.ContactDashboard.AsNoTracking().ToListAsync();
            CustomerNeed = await _context.CustomerNeed.AsNoTracking().ToListAsync();
            SupplierTalent = await _context.SupplierTalent.AsNoTracking().ToListAsync();
            BadgesforCusContact = await _context.BadgesforCusContact.AsNoTracking().ToListAsync();
            BadgesforSupContact = await _context.BadgesforSupContact.AsNoTracking().ToListAsync();
            PointsforCusContact = await _context.PointsforCusContact.AsNoTracking().ToListAsync();
            PointsforSupContact = await _context.PointsforSupContact.AsNoTracking().ToListAsync();
            RatingfromSupContactToCusContact = await _context.RatingfromSupContactToCusContact.AsNoTracking().ToListAsync();
            RatingfromCusContactToSupContact = await _context.RatingfromCusContactToSupContact.AsNoTracking().ToListAsync();
            TimeReport = await _context.TimeReport.AsNoTracking().ToListAsync();

            //=================================================================
            // Adding new Dashboard Contact except 0 Contact Id (not logged In)
            //=================================================================
            _context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
            var ContactDashboard = new Models.ContactDashboard();
            
            // Make Loop over all contacts
            foreach (var contactitem in Contact)
            {
                // Create new dashboard contact if new contacts are created



                if (contactitem.ContactId != 0)
                { 

                    if (!ContactDashboardExists(contactitem.ContactId))
                    {
                        ContactDashboard.DashboardContactId = contactitem.ContactId;
                        _context.ContactDashboard.Add(ContactDashboard);
                        await _context.SaveChangesAsync();
                    }
                }
            }


            //=================================================================
            // Clear all values except 0 Contact Id (not logged In)
            //=================================================================

            // Make Loop over all contacts
            foreach (var contactitem in Contact)
            {
                if (contactitem.ContactId !=0)
                { 
                    ContactDashboard = await _context.ContactDashboard.FirstOrDefaultAsync(m => m.DashboardContactId == contactitem.ContactId);
                    ContactDashboard.DashboardContactId = contactitem.ContactId;

                    // Reset all values to zero (Basis for add-up calculation)
                    ContactDashboard.NumberofCusNeedDemands = 0;
                    ContactDashboard.NumberofTalentOfferings = 0;
                    ContactDashboard.NumberofCusBadgesPlatin = 0;
                    ContactDashboard.NumberofCusBadgesGold = 0;
                    ContactDashboard.NumberofCusBadgesSilver = 0;
                    ContactDashboard.NumberofCusBadgesBronze = 0;
                    ContactDashboard.NumberofCusBadgesIron = 0;
                    ContactDashboard.NumberofSupBadgesPlatin = 0;
                    ContactDashboard.NumberofSupBadgesGold = 0;
                    ContactDashboard.NumberofSupBadgesSilver = 0;
                    ContactDashboard.NumberofSupBadgesBronze = 0;
                    ContactDashboard.NumberofSupBadgesIron = 0;
                    ContactDashboard.NumberofTotalCusPoints = 0;
                    ContactDashboard.NumberofTotalSupPoints = 0;
                    ContactDashboard.NumberofCusRecessions = 0;
                    ContactDashboard.NumberofSupRecessions = 0;
                    ContactDashboard.ValueofCusRecessions = 0;
                    ContactDashboard.ValueofSupRecessions = 0;
                    ContactDashboard.NumberofCusHours = 0;
                    ContactDashboard.NumberofSupHours = 0;

                   // Make Loop over all Customer Needs records
                   var customerneeditems = CustomerNeed.Where(x => x.NeedContactId == contactitem.ContactId);

                    foreach (var customerneeditem in customerneeditems)
                    {
                        ContactDashboard.NumberofCusNeedDemands = ContactDashboard.NumberofCusNeedDemands + 1;
                        ContactDashboard.NumberofCusHours = ContactDashboard.NumberofCusHours + customerneeditem.NeedTimeExpectedHours;
                    }

                    // Make Loop over all supplier talents offers records
                    var suppliertanlenttitems = SupplierTalent.Where(x => x.TalentContactId == contactitem.ContactId);

                    foreach (var suppliertanlenttitem in suppliertanlenttitems)
                    {
                        ContactDashboard.NumberofTalentOfferings = ContactDashboard.NumberofTalentOfferings + 1;
                    }

                    // Make Loop over all Customer badges records
                    var badgesforcusitems = BadgesforCusContact.Where(x => x.BadgesCusContactId == contactitem.ContactId);

                    foreach (var badgesforcusitem in badgesforcusitems)
                    {
                        if (badgesforcusitem.BadgesLevel == "Platin")
                        {
                            ContactDashboard.NumberofCusBadgesPlatin = ContactDashboard.NumberofCusBadgesPlatin + 1;
                        }
                        if (badgesforcusitem.BadgesLevel == "Gold")
                        {
                            ContactDashboard.NumberofCusBadgesGold = ContactDashboard.NumberofCusBadgesGold + 1;
                        }
                        if (badgesforcusitem.BadgesLevel == "Silver")
                        {
                            ContactDashboard.NumberofCusBadgesSilver = ContactDashboard.NumberofCusBadgesSilver + 1;
                        }
                        if (badgesforcusitem.BadgesLevel == "Bronze")
                        {
                            ContactDashboard.NumberofCusBadgesBronze = ContactDashboard.NumberofCusBadgesBronze + 1;
                        }
                        if (badgesforcusitem.BadgesLevel == "Iron")
                        {
                            ContactDashboard.NumberofCusBadgesIron = ContactDashboard.NumberofCusBadgesIron + 1;
                        }
                    }

                    // Make Loop over all Supplier badges records
                    var badgesforsupitems = BadgesforSupContact.Where(x => x.BadgesSupContactId == contactitem.ContactId);

                    foreach (var badgesforsupitem in badgesforsupitems)
                    {
                        if (badgesforsupitem.BadgesLevel == "Platin")
                        {
                            ContactDashboard.NumberofSupBadgesPlatin = ContactDashboard.NumberofSupBadgesPlatin + 1;
                        }
                        if (badgesforsupitem.BadgesLevel == "Gold")
                        {
                            ContactDashboard.NumberofSupBadgesGold = ContactDashboard.NumberofSupBadgesGold + 1;
                        }
                        if (badgesforsupitem.BadgesLevel == "Silver")
                        {
                            ContactDashboard.NumberofSupBadgesSilver = ContactDashboard.NumberofSupBadgesSilver + 1;
                        }
                        if (badgesforsupitem.BadgesLevel == "Bronze")
                        {
                            ContactDashboard.NumberofSupBadgesBronze = ContactDashboard.NumberofSupBadgesBronze + 1;
                        }
                        if (badgesforsupitem.BadgesLevel == "Iron")
                        {
                            ContactDashboard.NumberofSupBadgesIron = ContactDashboard.NumberofSupBadgesIron + 1;
                        }
                    }

                    // Make Loop over all Customer Points records
                    var cuspointsitems = PointsforCusContact.Where(x => x.PointsCusContactId == contactitem.ContactId);

                    foreach (var cuspointsitem in cuspointsitems)
                    {
                        ContactDashboard.NumberofTotalCusPoints = ContactDashboard.NumberofTotalCusPoints + cuspointsitem.PointsTotal;
                    }

                    // Make Loop over all Supplier Points records
                    var suppointsitems = PointsforSupContact.Where(x => x.PointsSupContactId == contactitem.ContactId);

                    foreach (var suppointsitem in suppointsitems)
                    {
                        ContactDashboard.NumberofTotalSupPoints = ContactDashboard.NumberofTotalSupPoints + suppointsitem.PointsTotal;
                    }

                    // Make Loop over all Customer Recessions records
                    var cusrecessionstitems = RatingfromSupContactToCusContact.Where(x => x.RatingCusContactId == contactitem.ContactId);

                    foreach (var cusrecessionstitem in cusrecessionstitems)
                    {
                        ContactDashboard.NumberofCusRecessions = ContactDashboard.NumberofCusRecessions + 1;

                        ContactDashboard.ValueofCusRecessions = ContactDashboard.ValueofCusRecessions +
                                                                cusrecessionstitem.RatingValue;

                    }

                    // Make Loop over all Supplier Recessions records
                    var suprecessionstitems = RatingfromCusContactToSupContact.Where(x => x.RatingSupContactId == contactitem.ContactId);

                    foreach (var suprecessionstitem in suprecessionstitems)
                    {
                        ContactDashboard.NumberofSupRecessions = ContactDashboard.NumberofSupRecessions + 1;
                        ContactDashboard.ValueofSupRecessions = ContactDashboard.ValueofSupRecessions +
                                                                suprecessionstitem.RatingValue;

                    }

                    // Make Loop over all Timesheet records
                    var timesheettitems = TimeReport.Where(x => x.TimeReportSupplierTalentContactId == contactitem.ContactId);

                    foreach (var timesheettitem in timesheettitems)
                    {
                        ContactDashboard.NumberofSupHours = ContactDashboard.NumberofSupHours +
                                                            timesheettitem.TimeReportHours;

                    }

                    _context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
                    _context.Attach(ContactDashboard).State = EntityState.Modified;
                    await _context.SaveChangesAsync();
                }
            }

            //Success
            if (SessionIdLang == "DE")
            {
                toastNotification.AddSuccessToastMessage("Daten erfolgreich berechnet");
            }

            if (SessionIdLang == "EN")
            {
                toastNotification.AddSuccessToastMessage("Data add up successfully");
            }

            if (SessionIdLang == "FR")
            {
                toastNotification.AddSuccessToastMessage("Chargement des données réussi");
            }

            return RedirectToPage("/ContactDashboardOverview/Index");
        }

        private bool ContactDashboardExists(int id)
        {
            _context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
            return _context.ContactDashboard.Any(e => e.DashboardContactId == id);
        }
    }
}

希望这对遇到此错误的其他人有所帮助。