(请参阅related question了解LINQ-to-SQL)
我想使用NHibernate将具有URI
成员的类映射到string
列。
我到底能做到这一点?
我不认为给出相关问题的解决方案在这里工作 - 我不能声明私有字段并映射它,因为映射需要引用该字段。
答案 0 :(得分:8)
除非你需要做一些特殊的事情,否则NHibernate提供的UriType
会起作用(我不知道它引入了什么版本 - 我使用的是3.1.4000)。无需编写自定义用户类型。
您可以在UriType
中指定ClassMap<>
:
public class ImportedWebImageMap : ClassMap<ImportedWebImage>
{
public ImportedWebImageMap()
{
Id(x => x.Id);
Map(x => x.SourceUri).CustomType<UriType>();
}
}
您可以使用属性约定映射所有Uri
属性以使用UriType
:
public class UriConvention : IPropertyConvention
{
public void Apply(IPropertyInstance instance)
{
if (typeof(Uri).IsAssignableFrom(instance.Property.PropertyType))
instance.CustomType<UriType>();
}
}
如果要将Uri
作为varchar
而不是默认nvarchar
存储在数据库中,则可以创建派生自UriType
的自定义类型并指定{ {1}} SQL类型:
AnsiString
答案 1 :(得分:3)
同样的解决方案可以正常工作;您可以将字符串属性定义为私有,因此不会向任何人公开。
Fluent NHibernate不像标准HBM文件那样容易处理,但可以通过几种方式完成。有关说明,请参阅Fluent NHibernate Wiki。
或者,我认为你必须定义一个IUserType类,它可以将值加载/保存为字符串。可以在at the end of this blog post找到使用Fluent NHibernate执行此操作的示例。