Example #1
0
 public virtual DbCommandInfo CreateDbCommandInfo(EntityCommand entityCommand, string name, DbTableInfo mainTable, DbExecutionType executionType, string sql)
 {
     var descrTag = GetDbCommandDescriptiveTag(entityCommand);
       var cmdInfo = new DbCommandInfo(entityCommand, name, mainTable, executionType, sql, descrTag);
       //Create parameters from entity command parameters
       var policy = DbModel.Config.NamingPolicy;
       var prmPrefix = GetParameterPrefix();
       for(int i=0; i< entityCommand.Parameters.Count; i++) {
     var entParam = entityCommand.Parameters[i];
     var paramName = prmPrefix + policy.ConstructDbParameterName(entParam.Name);
     DbParamInfo prmInfo;
     if (entParam.SourceMember != null) {
       var col = mainTable.Columns.FirstOrDefault(c => c.Member == entParam.SourceMember);
       Util.Check(col != null, "Failed to find Db column for member {0}, entity {1}.", entParam.SourceMember.MemberName, mainTable.Entity.Name);
       prmInfo = cmdInfo.AddParameter(entParam, paramName, col, i);
     } else {
       var typeInfo = GetDbTypeInfo(entParam.DataType, entParam.Size);
       prmInfo = cmdInfo.AddParameter(entParam, paramName, typeInfo, i);
     }
     // SQL CE does not support output parameters
     if (!this.DbModel.Driver.Supports(DbFeatures.OutputParameters))
       prmInfo.Direction = ParameterDirection.Input;
     if (prmInfo.Direction == ParameterDirection.Output || prmInfo.Direction == ParameterDirection.InputOutput) {
       cmdInfo.PostUpdateActions.Add((con, cmd, rec) => {
     var prm = (IDbDataParameter) cmd.Parameters[prmInfo.Name];
     rec.SetValueDirect(prmInfo.SourceColumn.Member, prm.Value);
       });
     }
       }//foreach entParam
       return cmdInfo;
 }