Операции takeWhile
и dropWhile
добавлены в JDK 9. Ваш примерный код
IntStream
.iterate(1, n -> n + 1)
.takeWhile(n -> n < 10)
.forEach(System.out::println);
будет вести себя точно так, как вы ожидаете, когда он скомпилирован и запущен под JDK 9.
Выпущен JDK 9. Его можно скачать здесь: http://jdk.java.net/9/
Способ Определите это соглашение, которое иногда менялось назад, теперь оно:
public class EnumConvention : IUserTypeConvention
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Property.PropertyType.IsEnum);
}
public void Apply(IPropertyInstance target)
{
target.CustomType(target.Property.PropertyType);
}
}
Так, как упомянуто, получать последнюю версию Быстрого NHibernate от соединительной линии получило меня туда, где я должен был быть. Пример, отображающийся для перечисления с последним кодом:
Map(quote => quote.Status).CustomTypeIs(typeof(QuoteStatus));
пользовательский тип вынуждает его быть обработанным как экземпляр перечисления вместо того, чтобы использовать GenericEnumMapper<TEnum>
.
я на самом деле полагаю, что представление патча в состоянии измениться между перечислимым картопостроителем, который сохраняет строку и ту, которая сохраняет интервал, поскольку это походит на что-то, что необходимо быть в состоянии установить как соглашение.
<час>Это открылось на моем недавнем действии, и вещи изменились в более новых версиях Быстрого NHibernate для создания этого легче.
, Чтобы заставить все перечисления, которые будут отображены как целые числа, можно теперь создать соглашение как так:
public class EnumConvention : IUserTypeConvention
{
public bool Accept(IProperty target)
{
return target.PropertyType.IsEnum;
}
public void Apply(IProperty target)
{
target.CustomTypeIs(target.PropertyType);
}
public bool Accept(Type type)
{
return type.IsEnum;
}
}
Тогда Ваше отображение только должно быть:
Map(quote => quote.Status);
Вы добавляете соглашение к своему Быстрому NHibernate, отображающемуся как так;
Fluently.Configure(nHibConfig)
.Mappings(mappingConfiguration =>
{
mappingConfiguration.FluentMappings
.ConventionDiscovery.AddFromAssemblyOf<EnumConvention>();
})
./* other configuration */
Вы могли создать NHibernate IUserType
и определить его с помощью CustomTypeIs<T>()
на карте свойства.
Не забывайте о перечислениях, допускающих значение NULL (например, ExampleEnum? ExampleProperty
)! Их нужно проверять отдельно. Вот как это делается с новой конфигурацией стиля FNH:
public class EnumConvention : IUserTypeConvention
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Property.PropertyType.IsEnum ||
(x.Property.PropertyType.IsGenericType &&
x.Property.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) &&
x.Property.PropertyType.GetGenericArguments()[0].IsEnum)
);
}
public void Apply(IPropertyInstance target)
{
target.CustomType(target.Property.PropertyType);
}
}
вот как я сопоставил свойство enum со значением int:
Map(x => x.Status).CustomType(typeof(Int32));
у меня работает!