using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using EnVisage.Models; namespace EnVisage.Code.BLL { public class StrategicGoalManager : ManagerBase { public StrategicGoalManager(EnVisageEntities dbContext) : base(dbContext) { } protected override StrategicGoal InitInstance() { return new StrategicGoal { Id = Guid.NewGuid() }; } protected override StrategicGoal RetrieveReadOnlyById(Guid key) { return DataTable.AsNoTracking().FirstOrDefault(t => t.Id == key); } public override DbSet DataTable { get { return DbContext.StrategicGoals; } } public override StrategicGoal Save(StrategicGoalModel model) { var goal = base.Save(model); if (model.Id == Guid.Empty) goal.Id = Guid.NewGuid(); var oldGoal2Companies = DbContext.StrategicGoal2Company.Where(x => x.StrategicGoalId == goal.Id).ToList(); var oldGoalCompaniesIds = oldGoal2Companies.Select(x => x.CompanyId); foreach (var t in oldGoal2Companies) { if (!model.CompanyId.Contains(t.CompanyId)) DbContext.StrategicGoal2Company.Remove(t); } foreach (var companyId in model.CompanyId.Except(oldGoalCompaniesIds)) { DbContext.StrategicGoal2Company.Add(new StrategicGoal2Company() { Id = Guid.NewGuid(), CompanyId = companyId, StrategicGoalId = goal.Id }); } return goal; } } }