здесьАвтор: ili
Дата: 27.01.09
описание и предложение по фиксу.
ежели ни у кого нет времени фиксить, дайте ключи от клавиатуры, фиксану сам
Здравствуйте, ili, Вы писали:
ili>здесьАвтор: ili
Дата: 27.01.09
описание и предложение по фиксу.
ili>ежели ни у кого нет времени фиксить, дайте ключи от клавиатуры, фиксану сам
забавно что, неверно генерится Insert а вот Update генерится нормально, разница:
для SqlQueryBase.CreateInsertSqlText:
foreach (MemberMapper mm in GetFieldList(om))
{
// IT: This works incorrectly for complex mappers.
//
bool isSet;
if (!mp.GetNonUpdatableFlag(type, typeExt, mm.ComplexMemberAccessor, out isSet) || !isSet)
{
sb.AppendFormat("\t{0},\n",
db.DataProvider.Convert(mm.Name, ConvertType.NameToQueryField));
list.Add(mm);
}
}
для SqlQueryBase.CreateUpdateSqlText:
foreach (MemberMapper mm in GetFieldList(om))
{
bool isSet;
if (!mp.GetNonUpdatableFlag(type, typeExt, mm.MemberAccessor, out isSet) || !isSet)
{
SqlQueryParameterInfo p = query.AddParameter(
db.DataProvider.Convert(mm.Name, ConvertType.NameToQueryParameter).ToString(),
mm.Name);
sb.AppendFormat("\t{0} = {1},\n",
db.DataProvider.Convert(p.FieldName, ConvertType.NameToQueryField),
p.ParameterName);
}
}
как бы не ясно, отчего такая разница, и что считать правдой.
вообще, с моей скромной точки зрения, наблюдается некоторая путаница между пользованием метадатапровайдера и ObjectMapper\MemberMapper\MapMamberInfo
так, например, недавно созданный SqlIgnore успешно перекочевал как в метадатапровайдер, так и в MapMemberInfo
далее, если смотреть кто пользуется MetadataProvider то получается, что это:
1) SqlTable и SqlDataAccessorBase — оба пользуют GetTableName
2) SqlQueryBase — усиленно пользует
3) MappingSchema — GetMapValues, GetDefaultValue
4) ObjectMapper — усиленно, для инициализации MemberMapper-ов
В свою очередь метадатапровайдер не гнушается пользовать MappingSchema
наблюдается какой-то разброд... кроме одного момента: все это дело используется для получения метадаты, которая всегда используется в контексте Object/MemberMapper (либо, как в случае с SqlTable и SqlDataAccessorBase спокойно может использоваться)
в связи с этим у меня возникает предложение "спрятать" использование метадатапровайдеров за Object\MemberMapper (например, для MemberMapper eсть MapMamberInfo, которая частично это делает).
Здравствуйте, ili, Вы писали:
ili>ежели ни у кого нет времени фиксить, дайте ключи от клавиатуры, фиксану сам
Шли мне свой гугль-аккаунт и пароль на it на rsdn.ru.