- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试通过代码获取使用 NHibernate (v3.3) 映射的自定义类型。我试着按照这个例子 here ,但没有运气。我试图实现的自定义类型是一种修剪来自数据库的字符串的类型。
我收到以下异常:
PropertyAccessException: Invalid Cast (check your mapping for property type mismatches). {"Unable to cast object of type 'System.String' to type 'ConsoleApplication1.TrimmedString'."}
这是我的完整尝试(gist)。
public class TrimmedString : IUserType
{
public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
//treat for the posibility of null values
string resultString = (string) NHibernateUtil.String.NullSafeGet(rs, names[0]);
if (resultString != null)
return resultString.Trim();
return null;
}
public void NullSafeSet(IDbCommand cmd, object value, int index)
{
if (value == null)
{
NHibernateUtil.String.NullSafeSet(cmd, null, index);
return;
}
value = ((string) value).Trim();
NHibernateUtil.String.NullSafeSet(cmd, value, index);
}
public object DeepCopy(object value)
{
if (value == null) return null;
return string.Copy((String) value);
}
public object Replace(object original, object target, object owner)
{
return original;
}
public object Assemble(object cached, object owner)
{
return DeepCopy(cached);
}
public object Disassemble(object value)
{
return DeepCopy(value);
}
public SqlType[] SqlTypes
{
get
{
SqlType[] types = new SqlType[1];
types[0] = new SqlType(DbType.String);
return types;
}
}
public Type ReturnedType
{
get { return typeof (String); }
}
public bool IsMutable
{
get { return false; }
}
public new bool Equals(object x, object y)
{
if (ReferenceEquals(x, y)) return true;
var xString = x as string;
var yString = y as string;
if (xString == null || yString == null) return false;
return xString.Equals(yString);
}
public int GetHashCode(object x)
{
return x.GetHashCode();
}
}
这是我的映射:
public class Person
{
public virtual int Id { get; set; }
public virtual TrimmedString FirstName { get; set; }
public virtual string LastName { get; set; }
}
public class PersonMap : ClassMapping<Person>
{
public PersonMap()
{
Table("Source");
Id(i => i.Id);
Property(i => i.FirstName, map => map.Type<TrimmedString>());
Property(i => i.LastName);
}
}
不确定我是否必须在 NHibernate 配置对象中做任何特殊的事情,但我已将其包含在上面链接的 Gist 中。
最佳答案
在Person
中,应该是...
public virtual string FirstName { get; set; }
...,不是 TrimmedString
。 TrimmedString
只是指示 NHibernate 您希望该属性如何被水合和脱水的类。它所应用的属性应该是 ReturnedType
指定的类型 - 换句话说,String
。 NHibernate 试图用 string
值设置 FirstName
属性(因为那是 TrimmedString
说它应该做的),但它不能因为 FirstName
只允许 TrimmedString
,因此出现“Invalid Cast”错误。
关于c# - NHibernate 按代码映射和 IUsertype 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18635390/
我有这个实现 IUserType 的类: public class StringToIntType : IUserType { /// /// mutable
嗨,我想知道两者之间的区别,为什么要使用一种而不是另一种以及何时使用? 最佳答案 您的对象模型不一定与您的数据库模型一一对应,而且在大多数情况下会更丰富。组件是通过在对象模型中封装功能来丰富数据库模型
首先让我为这篇文章的长度道歉,虽然它主要是代码,所以我希望大家多多包涵! 我有一个处理遗留数据库的场景,我需要使用 NHibernate 3.2 编写一个 IUserType 来获取一个 2 个字符的
我使用 NHibernate 和 Postgresql 作为后端,并且必须创建自定义类型以将 System.DateTime 转换为 Postgresql“时间”类型以及将 System.TimeSp
我正在尝试通过代码获取使用 NHibernate (v3.3) 映射的自定义类型。我试着按照这个例子 here ,但没有运气。我试图实现的自定义类型是一种修剪来自数据库的字符串的类型。 我收到以下异常
我正在尝试为州和国家/地区代码实现 IUserType,这将允许我访问两个字母的代码(存储在数据库中的内容)以及全名。我遵循 NHibernate 3.0 Cookbook(第 225 页)中的示例,
我有一个 LocalizedString 类,用于存储单个值的本地化。这个概念大致基于 post by Fabio Maulo . 我在 NHibernate 3.2 中使用新的 Mapping-By
我如何在 NHibernate 中构建针对自定义 IUserType 字段的查询? 更具体地说:我正在处理一个棕地应用程序。我在数据库中有一个名为“State”的字段,其中包含一个表示给定对象所处状态
在执行如下 NHibernate Linq 查询时是否可以防止此异常: var dateFilter = DateTime.Parse("1500-01-01"); return _session.Q
我们有一个主要对应于 System.Int64 的自定义类型,用于我们的系统标识符(它对潜在的长值可以是什么提供了一些额外的限制)。 我们还定义了一个 IUserType 以允许我们将此类型的属性映射
在我的项目中,我使用 IUserType (BooleanM1) 来处理 bool 值并将 -1 表示为真,0 表示为假值写入数据库。到目前为止一切正常。映射看起来像这个: 所以如果我做如下查询 v
对于我当前的项目,我在 C# 中使用 CaSTLe 的 ActiveRecord。对于我的一张表,我确实需要使用自定义类型类(处理愚蠢的时间到时间跨度的转换)。为了保持我的代码干净,我喜欢在对象映射类
我正在尝试创建一个 NHibernate IUserType野田时间LocalTime逻辑上映射到 time 的类型输入 Sql Server 2008/2012。我能够从数据库中保存和加载值。但是,
我是一名优秀的程序员,十分优秀!