Автоматический выбор файла в обозревателе решений на его открытой вкладке

. Обычно многие файлы в Visual Studio 2010 открываются во многих вкладках, в то же время массово работая над проектом. , Много раз я обнаруживал, что щелкаю правой кнопкой мыши по заголовку вкладки и ищу Показать / Выбрать / Прокрутить до этого файла в Обозревателе решений , и не могу его найти. Другие свойства перечисления в модели должны быть сопоставлены со строками, поэтому я не хочу определять ...

Я пытаюсь сопоставить свойство перечисления (экземпляр System.DayOfWeek) в моей модели с целочисленным полем базы данных , Другие свойства перечисления в модели должны быть сопоставлены со строками, поэтому я не хочу определять соглашение.

Я понимаю, что это должно быть возможно при использовании беглого отображения, подобного:

Map(x => x.DayOfWeek).CustomType();

, и действительно, на первый взгляд это выглядит чтобы работать.

Однако я заметил, что экземпляры сущностей со свойствами, отображаемыми таким образом, обновляются каждый раз, когда сеанс сбрасывается, даже если в них не было внесено никаких изменений.

Чтобы выяснить, что вызывает В этом случае я установил IPreUpdateEventListener и проверил OldState и State объекта. Смотрите прикрепленное изображение. В OldState соответствующим объектом является int, тогда как в State это DayOfWeek.

Если я использую отображение HBM XML без указанного атрибута типа, эта проблема не возникает.

Итак ...

Это ошибка или недостаток в GenericEnumMapper? Есть ли способ сообщить FNH-сопоставлению не указывать атрибуты типа в сгенерированном HBM? Если нет, могу ли я указать тип по умолчанию, который NH использует для перечислений (и что это)?

alt text

22
задан Ian Nelson 20 August 2010 в 15:14
поделиться

4 ответа

Если вы используете мое соглашение о перечислении, у вас нет этой проблемы.

public class EnumConvention : IPropertyConvention, IPropertyConventionAcceptance
{
    public void Apply(IPropertyInstance instance)
    {
        instance.CustomType(instance.Property.PropertyType);
    }

    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
    {
        criteria.Expect(x => x.Property.PropertyType == typeof(AddressType)  ||
            x.Property.PropertyType == typeof(Status) ||
            x.Property.PropertyType == typeof(DayOfWeek));
    }
}

Затем вы можете сопоставить свое свойство, как обычно:

Map(x => x.DayOfWeek);

РЕДАКТИРОВАТЬ: Обновлено соглашение, чтобы выбрать конкретные перечисления для использования для преобразования int. Все перечисления, которые здесь не проверяются, будут отображаться как строки. Возможно, вам придется немного поэкспериментировать с тем, против чего на самом деле тестировать. Я не уверен, что свойство propertytype сделает это напрямую.

23
ответ дан 29 November 2019 в 05:06
поделиться

Один из способов обхода, который я использую, - это иметь поле поддержки int и позволить NHibernate использовать его для сопоставления.

Всякий раз, когда NHibernate должен выполнить приведение для сравнения нового значения со старым - оно всегда помечается как грязное, что вызывает сброс.

4
ответ дан 29 November 2019 в 05:06
поделиться

Это зависит от того, нужно ли вам указывать DayOfWeek как целое число.

Если вы выполняете приведение как часть сопоставления, равенство всегда не выполняется, и свойство будет помечено как грязное.

Я бы, вероятно, сопоставил:

Map (x => x.DayOfWeek) .CustomType ();

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

0
ответ дан 29 November 2019 в 05:06
поделиться

Вы можете рассмотреть альтернативный подход; Я обнаружил, что использование хорошо известных типов экземпляров Фабио Мауло неоценимо для таких целей. Польза от них становится очевидной каждый раз, когда вы пытаетесь расширить возможности базового перечисления (например, предоставить локализованное описание и т. Д.)

0
ответ дан 29 November 2019 в 05:06
поделиться
Другие вопросы по тегам:

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