EnVisageOnline/Main-RMO/Source/EnVisage/Code/BLL/StrategicGoalManager.cs

61 lines
1.8 KiB
C#

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<StrategicGoal, StrategicGoalModel>
{
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<StrategicGoal> 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;
}
}
}