Платформа объекта: Отмените изменение свойства если никакое изменение в значении

Если вы хотите, чтобы скрипт выполнялся, когда ваш контейнер работает (не собирается), вы должны поместить его в директивы ENTRYPOINT или CMD. Но если у вас есть конвейер, лучше поместить все это в один файл bat и вызвать этот файл из Dockerfile

1111]

FROM foo
WORKDIR d:/work
# copy bat file into container
COPY entrypoint.bat d:/work/entrypoint.bat 
ENTRYPOINT ["d:/work/entrypoint.bat"]

Таким образом, после построения изображения просто запустите его без аргументов

docker build -t my-image .
docker run my-image   # ENTRYPOINT gets executed here
5
задан Rick Glos 21 January 2009 в 01:16
поделиться

3 ответа

Да, можно изменить это. Выполнение так не тривиально, однако, в текущей версии Платформы Объекта. Это станет легче в будущем.

Причина Вы видите это поведение, из-за генерации кода по умолчанию для модели объекта. Вот представительный пример:

public global::System.Guid Id
{
    get
    {
        return this._Id;
    }
    set
    {
        // always!
        this.OnIdChanging(value);
        this.ReportPropertyChanging("Id");
        this._Id = global::System.Data.Objects.DataClasses
                               .StructuralObject.SetValidValue(value);
        this.ReportPropertyChanged("Id");
        this.OnIdChanged();
    }
}
private global::System.Guid _Id;
partial void OnIdChanging(global::System.Guid value);
partial void OnIdChanged();

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

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

Примите генерацию кода

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

Устраните генерацию кода

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

Ожидать

Другая опция состоит в том, чтобы жить с Платформой Объекта путем, это в настоящее время, и ожидайте до следующего выпуска, который получит поведение, Вы требуете. Следующая версия Платформы Объекта будет использовать T4 по умолчанию, так настройка генерации кода будет очень легка.

5
ответ дан 14 December 2019 в 01:19
поделиться

Согласно MSDN:

Состояние объекта изменяется от Неизменного до Измененного каждый раз, когда метод set свойства называют. Это происходит, даже когда установленное значение совпадает с текущим значением. После того, как метод AcceptAllChanges называют, состояние возвращается к Неизменному. По умолчанию AcceptAllChanges называют во время деятельности SaveChanges.

Похож Вы захотите проверить значение свойств на Ваших объектах Объекта перед обновлением для предотвращения оператора UPDATE.

4
ответ дан 14 December 2019 в 01:19
поделиться

На универсальном уровне, если Ваши объекты реализуют INotifyPropertyChanged, Вы не хотите увольнение события PropertyChanged, если значение является тем же. Таким образом, каждое свойство похоже на этот:-

    public decimal Value
    {
        get
        {
            return _value;
        }
        set
        {
            if (_value != value)
            {
                _value = value;
                if (_propertyChanged != null) _propertyChanged(this, new PropertyChangedEventArgs("Value"));
            }
        }

    }

Надежда это относится к Платформе Объекта.

0
ответ дан 14 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

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