Nhibernate ValueType集合作为数据库中的分隔字符串
我有一个遗留数据库,我正在与Nhibernate映射。 在多个位置,一个och字符串或域对象列表被映射为数据库中的分隔字符串。值类型案例中的'string | string | string'与引用类型案例中的'domainID | domainID | domainID'类似 我知道我可以在类上创建一个伪属性并映射到该字段,但我希望以更干净的方式进行,比如将枚举映射为类的字符串表示形式 IUserType是到这里来的方式吗 提前谢谢 /约翰我在用这个:Nhibernate ValueType集合作为数据库中的分隔字符串,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我有一个遗留数据库,我正在与Nhibernate映射。 在多个位置,一个och字符串或域对象列表被映射为数据库中的分隔字符串。值类型案例中的'string | string | string'与引用类型案例中的'domainID | domainID | domainID'类似 我知道我可以在类上创建一个伪属性并映射到该字段,但我希望以更干净的方式进行,比如将枚举映射为类的字符串表示形式 IUserType是到这里来的方式吗 提前谢谢 /约翰我在用这个: public class Delimit
public class DelimitedList : IUserType
{
private const string delimiter = "|";
public new bool Equals(object x, object y)
{
return object.Equals(x, y);
}
public int GetHashCode(object x)
{
return x.GetHashCode();
}
public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
var r = rs[names[0]];
return r == DBNull.Value
? new List<string>()
: ((string)r).SplitAndTrim(new [] { delimiter });
}
public void NullSafeSet(IDbCommand cmd, object value, int index)
{
object paramVal = DBNull.Value;
if (value != null)
{
paramVal = ((IEnumerable<string>)value).Join(delimiter);
}
var parameter = (IDataParameter)cmd.Parameters[index];
parameter.Value = paramVal;
}
public object DeepCopy(object value)
{
return value;
}
public object Replace(object original, object target, object owner)
{
return original;
}
public object Assemble(object cached, object owner)
{
return cached;
}
public object Disassemble(object value)
{
return value;
}
public SqlType[] SqlTypes
{
get { return new SqlType[] { new StringSqlType() }; }
}
public Type ReturnedType
{
get { return typeof(IList<string>); }
}
public bool IsMutable
{
get { return false; }
}
}
SplitAndTrim是我自己对字符串的扩展。然后在使用ActiveRecord进行映射的类中:
[Property(ColumnType = "My.Common.Repository.UserTypes.DelimitedList, My.Common.Repository")]
public virtual IList<string> FooBar { get; set; }