public int SaveEntities(ContractTypes Data)
        {
            TopContractsV01Entities context = new TopContractsV01Entities(Utilities.getTestEnvName());
            TopContractsEntities.ContractType efContractType = null;
            foreach (TopContractsDAL10.SystemTables.ContractType contractType in Data.Entries)
            {
                if (contractType.New)
                {
                    efContractType = new TopContractsEntities.ContractType();
                }
                else
                {
                    efContractType = context.ContractTypes.Where(c => c.ContractTypeID == contractType.ID).SingleOrDefault();
                    if (contractType.Deleted == false)
                    {
                        SaveDefaultEntityFields(contractType.DefaultEntityFields.ToList(), contractType.ID);
                        SaveEntityGroup(efContractType, contractType.EntryTexts, false);
                    }
                }

                if (contractType.Deleted == false)
                {
                    efContractType.InitCommonFields(efContractType, contractType, efContractType.ContractTypesLNGs, this.organizationIdentifier);
                    //                    efContractType.SelectorFieldID = (contractType.SelectorField == (long)DefaultValues.SingleRecordID ? null : contractType.SelectorField); // To be used in case of entities
                    //Boaz 26-02-2013
                    efContractType.SelectorFieldID = (contractType.SelectorField == (long)DefaultValues.SingleRecordID || contractType.SelectorField == 0 ? null : contractType.SelectorField); // To be used in case of entities
                }

                if (contractType.New)
                {
                    context.ContractTypes.Add(efContractType);
                    context.SaveChanges(); // Saved the new contract type so that contract type id must be created and used.
                    SaveEntityGroup(efContractType, contractType.EntryTexts, true); // to create a new field group and to map it with current contract type.
                }
                else
                {
                    if (contractType.Deleted && efContractType != null)
                    {
                        // Need to be discussed with Boaz, whether the catalog type fields will be removed or LinkedEntityField will be removed.
                        foreach (TopContractsEntities.Field efFld in context.Fields.Where(fld => fld.LinkedEntityID == contractType.ID).ToList())
                        {
                            efFld.DeleteLanguageEntries(efFld, context.FieldsLNGs, efFld.FieldsLNGs);
                            context.Fields.Remove(efFld);
                        }

                        //Deleted entity records,entity fields,entity,FieldGroupsContractTypesMAPs,and Contract type --Added by deepak dhamija (28/02/2013)
                        efContractType.DeleteLanguageEntries(efContractType, context.ContractTypesLNGs, efContractType.ContractTypesLNGs);
                        FieldGroupsContractTypesMAP cTypeMap = context.FieldGroupsContractTypesMAPs.SingleOrDefault(map => map.ContractTypeID == efContractType.ContractTypeID);
                        if (cTypeMap != null)
                        {
                            //******************Condition Implemented for delete entry from FieldGroupsRolesMAP by Viplav on 15-Oct-2013********//
                            if (context.FieldGroupsRolesMAPs.Any(ent => ent.FieldGroupID == cTypeMap.FieldGroupID))
                            {
                                List<FieldGroupsRolesMAP> FieldGroupsRoleMap = context.FieldGroupsRolesMAPs.Where(t => t.FieldGroupID == cTypeMap.FieldGroupID).ToList();
                                foreach (FieldGroupsRolesMAP item in FieldGroupsRoleMap)
                                    context.FieldGroupsRolesMAPs.Remove(item);
                            }
                            //********************************************************************************************************************
                            TopContractsEntities.FieldGroup entityGroup = context.FieldGroups.SingleOrDefault(eg => eg.FieldGroupID == cTypeMap.FieldGroupID);
                            if (entityGroup != null)
                            {
                                List<TopContractsEntities.Field> entityfield = context.Fields.Where(ef => ef.FieldGroupID == cTypeMap.FieldGroupID).ToList();
                                if (entityfield != null)
                                {
                                    foreach (var flds in entityfield)
                                    {
                                        flds.DeleteLanguageEntries(flds, context.FieldsLNGs, flds.FieldsLNGs);
                                        if (flds.FieldType == (byte)FieldTypes.ListSingle)
                                        {
                                            foreach (TopContractsEntities.FieldListItem fldListItem in context.FieldListItems.Where(lstItem => lstItem.FieldID == flds.FieldID))
                                            {
                                                fldListItem.DeleteLanguageEntries(fldListItem, context.FieldListItemsLNGs, fldListItem.FieldListItemsLNGs);
                                                context.FieldListItems.Remove(fldListItem);
                                            }
                                        }

                                        foreach (TopContractsEntities.ContractField ctFld in context.ContractFields.Where(f => f.CatalogFieldID == flds.FieldID).ToList())
                                        {
                                            context.ContractFields.Remove(ctFld);
                                        }
                                        context.Fields.Remove(flds);
                                    }
                                }
                                entityGroup.DeleteLanguageEntries(entityGroup, context.FieldGroupsLNGs, entityGroup.FieldGroupsLNGs);
                                context.FieldGroups.Remove(entityGroup);
                            }
                            context.FieldGroupsContractTypesMAPs.Remove(cTypeMap);
                        }
                        context.ContractTypes.Remove(efContractType);
                        //end code--deepak dhamija
                        //Commented by deepak dhamija because its not deleted the entity records and its not verify the LinkedEntityID Exist or not.  
                        //efContractType.DeleteLanguageEntries(efContractType, context.ContractTypesLNGs, efContractType.ContractTypesLNGs);
                        //FieldGroupsContractTypesMAP cTypeMap = context.FieldGroupsContractTypesMAPs.SingleOrDefault(map => map.ContractTypeID == efContractType.ContractTypeID);
                        //if (cTypeMap != null)
                        //{
                        //    TopContractsEntities.FieldGroup entityGroup = context.FieldGroups.SingleOrDefault(eg => eg.FieldGroupID == cTypeMap.FieldGroupID);
                        //    if (entityGroup != null)
                        //    {
                        //        entityGroup.DeleteLanguageEntries(entityGroup, context.FieldGroupsLNGs, entityGroup.FieldGroupsLNGs);
                        //        context.FieldGroups.Remove(entityGroup);
                        //    }
                        //    context.FieldGroupsContractTypesMAPs.Remove(cTypeMap);
                        //}
                        //context.ContractTypes.Remove(efContractType);


                        if (context.ContractTypesFieldsToCreateDefaults.Any(ct => ct.ContractTypeID == contractType.ID))
                        {
                            foreach (TopContractsEntities.ContractTypesFieldsToCreateDefault defEntFld in context.ContractTypesFieldsToCreateDefaults.Where(ct => ct.ContractTypeID == contractType.ID).ToList())
                            {
                                context.ContractTypesFieldsToCreateDefaults.Remove(defEntFld);
                            }
                        }
                    }
                }
            }
            return context.SaveChanges();
        }
        public int Save(ContractTypes Data)
        {
            TopContractsV01Entities context = new TopContractsV01Entities(Utilities.getTestEnvName());
            TopContractsEntities.ContractType efContractType = null;
            foreach (TopContractsDAL10.SystemTables.ContractType contractType in Data.Entries)
            {
                if (contractType.New)
                {
                    efContractType = new TopContractsEntities.ContractType();
                    //efContractType.ParentContractTypeID = ConfigurationProvider.Default.ContractTypeContracts.ContractTypeContractsID;  //This parent value is used to save ContractParentID in database to make every new ContractType as Contracts
                    efContractType.ParentContractTypeID = Utilities.contractTypeContractsID;  // Code implemented by Viplav on 17 june 2013 for remove webconfig concept.
                }
                else
                {
                    efContractType = context.ContractTypes.Where(c => c.ContractTypeID == contractType.ID).SingleOrDefault();
                }

                if (contractType.Deleted == false)
                {
                    efContractType.InitCommonFields(efContractType, contractType, efContractType.ContractTypesLNGs, this.organizationIdentifier);
                    //efContractType.SelectorFieldID = contractType.SelectorField; // To be used in case of entities
                }

                if (contractType.New)
                    context.ContractTypes.Add(efContractType);
                else
                {
                    if (contractType.Deleted && efContractType != null)
                    {
                        efContractType.DeleteLanguageEntries(efContractType, context.ContractTypesLNGs, efContractType.ContractTypesLNGs);
                        context.ContractTypes.Remove(efContractType);
                    }
                }
            }
            return context.SaveChanges();
        }