Re[2]: Проблема с простым маппингом
От: Linguru  
Дата: 01.06.09 11:15
Оценка:
Здравствуйте, IT, Вы писали:

А>>Падает на выделенной строке.

А>>BLToolkit.Mapping.MappingException: Wrong mapping field name: 'col1', type: 'Object1'. Use field name 'col2' instead.

IT>Регистр имеет значение. Нужно, чтобы везде было либо col1, либо Col1.


Не помогло. Дело не в регистре. Похоже на то, что так оно и планировалось.

При вызове ObjectMapper["col1"] в строке (1) мы получаем маппер "col1" -> Col1.
Затем в строке (2) выясняем, что у Col1 уже есть другой маппер, и выбрасываем исключение.
Почему выбрасываем исключение, а не возвращаем null?


class ObjectMapper {
public  MemberMapper this[string name]
{
    get
    {
        if (name == null) throw new ArgumentNullException("name");

        MemberMapper mm = (MemberMapper)_nameToMember[name];

        if (mm == null)
        {
            lock (_nameToMember.SyncRoot)
            {
                mm = (MemberMapper)_nameToMember[name];

                if (mm == null)
                {
                    mm = (MemberMapper)_nameToMember[name.ToLower(CultureInfo.CurrentCulture)];

                    if (mm == null)
                    {
                        mm = GetComplexMapper(name, name); // (1)

                        if (mm != null)
                        {
                            if (_members.Contains(mm)) // (2)
                                throw new MappingException(string.Format(
                                    "Wrong mapping field name: '{0}', type: '{1}'. Use field name '{2}' instead.",
                                    name, _typeAccessor.OriginalType.Name, mm.Name));

                            Add(mm);
                        }
                    }
                    else
                        _nameToMember[name] = mm;
                }
            }
        }

        return mm;
    }
}


//Совсем не критично, в конце концов я могу свойство переименовать, но лучше, если не придется этого делать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.