отзязать маппинг на поля базы от класса
От: Tigor Россия  
Дата: 12.01.09 13:43
Оценка:
Есть класс с неким полем (полями):

public abstract class C:
{
    public string Field {get; set}
}


Есть хранимая процедура и хранимая функция (oracle)

procedure get_field(o_field out varchar2);

function select_c return sys_refcursor
   l_res sys_refcursor;
begin
   open l_res for
      select 'some_data' as field from dual;

   return l_res;
end;


Обратите внимание, что параметр процедуры называется o_field, а поле в запросе field.
Можно ли указать это различие в подобном аксессоре?

public class A: DataAccessor<C>
{
    [SprocName("get_field")]
    public abstract void GetField([Direction.Output("o_field")]C c);

    [SprocName("select_c")]
    public abstract C SelectС();
}


Другими словами:
можно ли указывать свою схему мапежа для каждого отдельного метода аксессора?
К сожалению, в действительности все выглядит иначе, чем на самом деле.
Re: отзязать маппинг на поля базы от класса
От: Sashko Россия http://www.dc.baika.ru/
Дата: 13.01.09 06:33
Оценка:
Здравствуйте, Tigor, Вы писали:

T>Другими словами:

T>можно ли указывать свою схему мапежа для каждого отдельного метода аксессора?

Нужно по override идть DataAccessor. Вот такую функцию

protected override IDbDataParameter[] CreateParameters(DbManager dbManager, Object obj, String[] outputParameters, String[] inputOutputParameters, String[] ignoreParameters, IDbDataParameter[] commandParameters)


например так

protected override IDbDataParameter[] CreateParameters(DbManager dbManager, Object obj, String[] outputParameters, String[] inputOutputParameters, String[] ignoreParameters, IDbDataParameter[] commandParameters)
{
    IDbDataParameter[] parameters = base.CreateParameters(dbManager, obj, outputParameters, inputOutputParameters, ignoreParameters, commandParameters);

    foreach (IDbDataParameter p in parameters)
    {
        string name = (string)dbManager.DataProvider.Convert(p.ParameterName, ConvertType.ParameterToName);
        p.ParameterName = String.Concat("o_", name);
    }
    return parameters;
}
Re[2]: отзязать маппинг на поля базы от класса
От: Tigor Россия  
Дата: 13.01.09 12:23
Оценка:
Здравствуйте, Sashko, Вы писали:

S>Нужно по override идть DataAccessor. Вот такую функцию


S>
S>protected override IDbDataParameter[] CreateParameters(DbManager dbManager, Object obj, String[] outputParameters, String[] inputOutputParameters, String[] ignoreParameters, IDbDataParameter[] commandParameters)
S>


Не совсем получилось (похоже, что эта функция не во всех случаях вызывается), но все равно спасибо большое.
Очень кстати поменяли naming convention в базе, так что, похоже, проблема сама собой отпала.
К сожалению, в действительности все выглядит иначе, чем на самом деле.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.