Может казаться, не получает IncludeProperties, работающий над UpdateModel в ASP.NET MVC

Ну, это распределяется. Сравнительные тесты указывают, что это значительно быстрее (учитывая ее распределенный характер, операции как diffs и журналы все локальны поэтому, конечно, это ослепительно быстрее в этом случае), и рабочие папки меньше (который все еще уносит мой ум).

, Когда Вы работаете над подрывной деятельностью или любой другой клиент-серверной системой управления версиями, Вы по существу создаете рабочие копии на своей машине проверка изменения. Это представляет снимок во время того, на что похож репозиторий. Вы обновляете свою рабочую копию через обновления, и Вы обновляете репозиторий через фиксации.

С распределенным управлением версиями, у Вас нет снимка, а скорее всей кодовой базы. Хотите сделать разность с 3-месячной версией? Без проблем, 3-месячная версия находится все еще на Вашем компьютере. Это не только означает, что вещами является путь быстрее, но если Вы разъединяетесь от своего центрального сервера, можно все еще сделать многие операции, к которым Вы привыкли. Другими словами, у Вас только есть снимок данного пересмотра, но вся кодовая база.

Вы думали бы, что Мерзавец поднимет набор пространства на Вашем жестком диске, но от пары сравнительных тестов я видел, это на самом деле берет меньше. Не спрашивайте меня как. Я имею в виду, это было создано Linus, он знает вещь или два о файловых системах, которые я предполагаю.

6
задан GONeale 3 August 2009 в 23:31
поделиться

1 ответ

Я изучал это с помощью Reflector ... стек вызовов:

UpdateModel () -> TryUpdateModel () - > DefaultModelBinder.BindModel () ---> либо BindComplexModel () , либо BindSimpleModel () .

Вот разборка для BindSimpleModel () :

 if (bindingContext.ModelType != typeof(string))
    {
        if (bindingContext.ModelType.IsArray)
        {
            return ConvertProviderResult(bindingContext.ModelState, bindingContext.ModelName, valueProviderResult, bindingContext.ModelType);
        }
        Type type = ExtractGenericInterface(bindingContext.ModelType, typeof(IEnumerable<>));
        if (type != null)
        {
            object o = this.CreateModel(controllerContext, bindingContext, bindingContext.ModelType);
            Type collectionType = type.GetGenericArguments()[0];
            Type destinationType = collectionType.MakeArrayType();
            object newContents = ConvertProviderResult(bindingContext.ModelState, bindingContext.ModelName, valueProviderResult, destinationType);
            if (typeof(ICollection<>).MakeGenericType(new Type[] { collectionType }).IsInstanceOfType(o))
            {
                CollectionHelpers.ReplaceCollection(collectionType, o, newContents);
            }
            return o;
        }
    }

Совершенно очевидно, что создаются новые элементы. Однако мне неясна точная логика флагов, и у меня нет времени, чтобы исследовать это дальше прямо сейчас. Между прочим, BindComplexModel похож в том, что он, кажется, создает новые элементы для типов коллекций.

Я попытаюсь проанализировать его позже.

1
ответ дан 17 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: