//public bool AddCodeFunctionToEntity(int codefuntionID, int entityID, bool showInFormula)
 //{
 //    using (var projectContext = new DataAccess.MyProjectEntities())
 //    {
 //        var dbCodeFunctionEntity = projectContext.CodeFunction_TableDrivedEntity.FirstOrDefault(x => x.TableDrivedEntityID == entityID && x.CodeFunctionID == codefuntionID);
 //        if (dbCodeFunctionEntity == null)
 //        {
 //            projectContext.CodeFunction_TableDrivedEntity.Add(new CodeFunction_TableDrivedEntity() { CodeFunctionID = codefuntionID, TableDrivedEntityID = entityID, ShowInFormula = showInFormula });
 //        }
 //        else
 //        {
 //            dbCodeFunctionEntity.ShowInFormula = showInFormula;
 //        }
 //        projectContext.SaveChanges();
 //    }
 //    return true;
 //}
 public int UpdateCodeFunctionEntity(CodeFunction_EntityDTO CodeFunctionEntity)
 {
     using (var projectContext = new DataAccess.MyProjectEntities())
     {
         var dbCodeFunctionEntity = projectContext.CodeFunction_TableDrivedEntity.FirstOrDefault(x => x.ID == CodeFunctionEntity.ID);
         if (dbCodeFunctionEntity == null)
         {
             dbCodeFunctionEntity = new CodeFunction_TableDrivedEntity();
         }
         dbCodeFunctionEntity.CodeFunctionID      = CodeFunctionEntity.CodeFunctionID;
         dbCodeFunctionEntity.TableDrivedEntityID = CodeFunctionEntity.EntityID;
         dbCodeFunctionEntity.Title = CodeFunctionEntity.Title;
         dbCodeFunctionEntity.Name  = CodeFunctionEntity.Name;
         while (dbCodeFunctionEntity.CodeFunction_TableDrivedEntity_Parameters.Any())
         {
             projectContext.CodeFunction_TableDrivedEntity_Parameters.Remove(dbCodeFunctionEntity.CodeFunction_TableDrivedEntity_Parameters.First());
         }
         //if (!CodeFunctionEntity.CodeFunctionEntityColumns.Any(x => x.ColumnID == 0))
         //{
         foreach (var column in CodeFunctionEntity.CodeFunctionEntityColumns)
         {
             CodeFunction_TableDrivedEntity_Parameters dbColumn = new DataAccess.CodeFunction_TableDrivedEntity_Parameters();
             dbColumn.ColumnID = column.ColumnID;
             dbColumn.CodeFunctionParameterID = column.CodeFunctionParameterID;
             dbCodeFunctionEntity.CodeFunction_TableDrivedEntity_Parameters.Add(dbColumn);
         }
         //}
         if (dbCodeFunctionEntity.ID == 0)
         {
             projectContext.CodeFunction_TableDrivedEntity.Add(dbCodeFunctionEntity);
         }
         projectContext.SaveChanges();
         return(dbCodeFunctionEntity.ID);
     }
 }
        //public List<CodeFunction_EntityDTO> GetCodeFunctionEntities(int entityID)
        //{
        //    List<CodeFunction_EntityDTO> result = new List<CodeFunction_EntityDTO>();
        //    using (var projectContext = new DataAccess.MyProjectEntities())
        //    {
        //        //projectContext.Configuration.LazyLoadingEnabled = false;

        //        var listCodeFunction = projectContext.CodeFunction_TableDrivedEntity.Where(x => x.TableDrivedEntityID == entityID);
        //        foreach (var item in listCodeFunction)
        //            result.Add(ToCodeFunction_EntityDTO(item, false));

        //    }
        //    return result;
        //}
        private CodeFunction_EntityDTO ToCodeFunction_EntityDTO(CodeFunction_TableDrivedEntity cItem, bool withColumns)
        {
            BizColumn bizColumn = new BizColumn();
            var       result    = new CodeFunction_EntityDTO();

            result.ID             = cItem.ID;
            result.Title          = cItem.Title;
            result.Name           = cItem.Name;
            result.EntityID       = cItem.TableDrivedEntityID;
            result.CodeFunctionID = cItem.CodeFunctionID;
            result.CodeFunction   = ToCodeFunctionDTO(cItem.CodeFunction, withColumns);
            if (withColumns)
            {
                result.CodeFunctionEntityColumns = ToCodeFunctionEntityColumnsDTO(cItem);
            }

            return(result);
        }
        //public int GetCodeFunctionEntityID(int entityID, int CodeFunctionID)
        //{
        //    List<CodeFunction_EntityDTO> result = new List<CodeFunction_EntityDTO>();
        //    using (var projectContext = new DataAccess.MyProjectEntities())
        //    {
        //        //projectContext.Configuration.LazyLoadingEnabled = false;

        //        var item = projectContext.CodeFunction_TableDrivedEntity.FirstOrDefault(x => x.TableDrivedEntityID == entityID && x.CodeFunctionID == CodeFunctionID);
        //        if (item != null)
        //            return item.ID;
        //        else
        //            return 0;

        //    }
        //}
        private List <CodeFunction_Entity_ColumnDTO> ToCodeFunctionEntityColumnsDTO(CodeFunction_TableDrivedEntity cItem)
        {
            BizColumn bizColumn = new BizColumn();
            List <CodeFunction_Entity_ColumnDTO> result = new List <CodeFunction_Entity_ColumnDTO>();

            foreach (var column in cItem.CodeFunction_TableDrivedEntity_Parameters)
            {
                var item = new CodeFunction_Entity_ColumnDTO();
                item.ID = column.ID;
                item.CodeFunctionParameterID = column.CodeFunctionParameterID;
                item.CodeFunction_EntityID   = column.CodeFunction_TableDrivedEntityID;
                item.ColumnID   = column.ColumnID;
                item.ColumnName = column.Column.Name;

                item.FunctionColumnDotNetType = Type.GetType(column.CodeFunctionParameter.DataType);
                item.FunctionColumnParamName  = column.CodeFunctionParameter.ParamName;
                result.Add(item);
            }
            return(result);
        }