[英]How to map IDictionary<string, Entity> in Fluent NHibernate
[英]How to map Type with Nhibernate (and Fluent NHibernate)
假设我有类似的东西:
public class DataType
{
//For NHibernate
private DataType(){}
public DataType(string name, Type type, string defaultValue)
{
Name = name;
TypeOfContent = type;
DefaultInvariantStringValue = defaultValue;
}
public string Name { get; set; }
public Type TypeOfContent { get; set; }
public string DefaultInvariantStringValue { get; set; }
}
如何使用NHibernate映射属性TypeOfContent(也可以使用流利的映射)?
我将类型限制为C#内置类型,例如字符串,整数,日期时间等。因此,我想将System.String(用于字符串)存储在数据库中
我很好奇,为什么不这样做
public class DataType
{
...
private string _typeOfContent;
public virtual Type TypeOfContent
{
get { return Type.GetType(_typeOfContent); }
set { _typeOfContent = value.FullName; }
}
}
...
public class DataTypeMap : ClassMap<DataType>
{
Map(x => x.TypeOfContent)
.Access.CamelCaseField(Prefix.Underscore)
.CustomType<string>();
}
我想知道这是否被过度考虑了。 您不能简单地将类型映射为属性吗?
public class DataTypeMap : ClassMap<DataType>
{
public DataTypeMap()
{
// ...
Map(x => x.TypeOfContent);
}
}
在sqlite中,至少它将映射到TEXT列,该列将存储AssemblyQualifiedName。
相关的hbm.xml在这里:
<property name="Type" type="System.Type, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Type" />
</property>
我还关心如何优雅地映射默认值的其他问题。 在sqlite中至少没有一列的“强类型” (我可能使用了错误的术语,请参见链接),因此至少在数据库级别上应该可以简单地拥有一个对象DefaultValue并在不使用的情况下进行持久/分散操作精度损失。 但是, 对于如何为NHibernate理解的映射创建一个悬而未决的问题 。
我将尝试回答我自己的问题,但我希望有另一种(更简单/更简便)的方法。
我想我可以将TypeOfContent属性的类型更改为BuiltInType(自定义Type包装器类),以便可以实现IUserType。
然后,我可以使用这种技术: http : //blog.jagregory.com/2009/01/11/fluent-nhibernate-auto-mapping-type-conventions/
编辑1: 我不喜欢这种解决方案,因为它迫使我在模型上添加对NHibernate的依赖项(IUserType)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.