Есть класс с неким полем (полями):
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С();
}
Другими словами:
можно ли указывать свою схему мапежа для каждого отдельного метода аксессора?
Здравствуйте, 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;
}
Здравствуйте, 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 в базе, так что, похоже, проблема сама собой отпала.