Add a fallback for Column recommended lenght for enum fields
asizikov opened this issue · 1 comments
asizikov commented
When I have a DataAcsessObject
with enum
property, and property has no values defined:
[DataAccessObject]
public abstract class DbType : DataAccessObject<Guid>
{
[PersistedMember]
public abstract Enum? EnumMember { get; set; }
}
public enum Enum
{
// No values defined here!
}
Shaolinq is trying to guess the size of the column and fails with the following exception:
XXX : System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation.
----> System.InvalidOperationException : Sequence contains no elements
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at System.Activator.CreateInstance(Type type, Object[] args)
at Shaolinq.Persistence.DefaultSqlDataTypeProvider.GetEnumDataType(Type type)
at Shaolinq.Persistence.DefaultSqlDataTypeProvider.GetSqlDataType(Type type)
at Shaolinq.Persistence.Linq.SqlDataDefinitionExpressionBuilder.BuildColumnDefinition(ColumnInfo columnInfo)
at Shaolinq.Persistence.Linq.SqlDataDefinitionExpressionBuilder.BuildCreateTableExpression(TypeDescriptor typeDescriptor)
at Shaolinq.Persistence.Linq.SqlDataDefinitionExpressionBuilder.Build()
at Shaolinq.Persistence.SqlDatabaseSchemaManager.BuildDataDefinitonExpressions(DatabaseCreationOptions options)
at Shaolinq.Persistence.SqlDatabaseSchemaManager.CreateDatabaseAndSchema(DatabaseCreationOptions options)
at Shaolinq.DataAccessModel.Create(DatabaseCreationOptions options)
at Namespace.Class.MethodName() in path/to/class.cs:line 34
--InvalidOperationException
at System.Linq.Enumerable.Max(IEnumerable`1 source)
at Shaolinq.Persistence.DefaultStringEnumSqlDataType`1.GetRecommendedLength(Type enumType)
at Shaolinq.Persistence.DefaultStringEnumSqlDataType`1.CreateConstraintDefaults(ConstraintDefaultsConfiguration defaultsConfiguration, Type type)
at Shaolinq.Persistence.DefaultStringEnumSqlDataType`1..ctor(ConstraintDefaultsConfiguration constraintDefaultsConfiguration)
That would be nice to have a more descriptive error message here, or use a fallback value for RecommendedLength
.
tumtumtum commented
Fixed in latest.