BUG: форинг кей
От: ili Россия  
Дата: 20.03.09 07:02
Оценка: 52 (1)
здесь
Автор: ili
Дата: 27.01.09
описание и предложение по фиксу.

ежели ни у кого нет времени фиксить, дайте ключи от клавиатуры, фиксану сам
Re: BUG: форинг кей
От: ili Россия  
Дата: 20.03.09 09:57
Оценка:
Здравствуйте, 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, которая частично это делает).
Re: BUG: форинг кей
От: IT Россия linq2db.com
Дата: 23.03.09 13:30
Оценка:
Здравствуйте, ili, Вы писали:

ili>ежели ни у кого нет времени фиксить, дайте ключи от клавиатуры, фиксану сам


Шли мне свой гугль-аккаунт и пароль на it на rsdn.ru.
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.