using System; using System.Collections.Generic; using System.Linq; using EnVisage.Models; namespace EnVisage.Code.BLL { public class ContactManager : ManagerBase { public ContactManager(EnVisageEntities dbContext) : base(dbContext) { } protected override Contact InitInstance() { return new Contact { Id = Guid.NewGuid() }; } protected override Contact RetrieveReadOnlyById(Guid key) { return DataTable.AsNoTracking().FirstOrDefault(t => t.Id == key); } public override System.Data.Entity.DbSet DataTable { get { return DbContext.Contacts; } } public ContactModel LoadContactModel(Guid contactId) { if (contactId == Guid.Empty) return null; return ContactModelBasicQuery.FirstOrDefault(x => x.Id == contactId); } public List GetContacts(Guid parentId) { if (parentId == Guid.Empty) return null; return ContactModelBasicQuery.Where(x => x.ParentId == parentId).ToList(); } public ContactModel GetContactByName(string FirstName,string LastName, ContactType contactType) { return (ContactModel)ContactModelBasicQuery.FirstOrDefault(x => x.FirstName == FirstName && x.LastName == LastName && x.Type == contactType); } #region Private Members private IQueryable ContactModelBasicQuery { get { var query = DataTable.AsNoTracking() .Select(x => new ContactModel() { Id = x.Id, Type = (ContactType)x.Type, FirstName = x.FirstName, LastName = x.LastName, Email = x.Email, Phone = x.Phone, ParentId = x.ParentId.HasValue ? x.ParentId.Value : Guid.Empty, ProjectLinksCount = x.Contact2Project.Count, ContactClassification = (InternalContactClassification)x.ContactClassification }); return query; } } #endregion } }