我正在将系统从php移动到C#并且使用NHibernate作为ORM。数据库模式使用guids进行id(没有FK),并且db中的空字符串和空值用于未填充的字段..好吧,NHibernate无法解析这个空字符串:
System.FormatException : Unrecognized Guid format.
at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters, IResultTransformer forcedResultTransformer)
at NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
at NHibernate.Loader.Hql.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters)
--FormatException
at System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument, String failureArgumentName, Exception innerException)
at System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result)
at System.Guid..ctor(String g)
at NHibernate.Type.GuidType.Get(IDataReader rs, Int32 index)
at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name)
at NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
我尝试过实现自定义类型,但发现这种情况发生在使用自定义类型之前。在解决这个问题方面,Haven能够在网上找到很多东西。
在MySql数据库上使用最新的NHibernate ..我明白添加外键和默认值会更好,但是我接管了一个项目,并且它的形状是:\任何nhibernate专家知道我是怎么做的可以解决这个问题吗?
Map(x => x.OrderId).Column("order_id");
public virtual Guid OrderId { get; set; }
它可以正常使用空值和实际guid,而不是空字符串或半长字符串..我已经尝试在映射上设置默认值,但它只是爆炸。列模式是varchar(36),我理解它默认被转换为guid ..因为即使我将它映射为字符串字段我得到无法识别的guid格式。我更喜欢NHIbernate修复,但会解决sql约束修复等问题。