[英]Mapping a URI to string in Fluent NHibernate
(請參閱LINQ-to-SQL的相關問題 )
我想使用NHibernate將具有URI
成員的類映射到string
列。 我究竟該如何實現這一目標?
我不認為給出相關問題的解決方案在這里工作 - 我不能聲明私有字段並映射它,因為映射需要引用該字段。
除非你需要做一些特殊的事情, UriType
NHibernate提供的UriType
會起作用(我不知道它引入了什么版本 - 我使用的是3.1.4000)。 無需編寫自定義用戶類型。
您可以在ClassMap<>
指定UriType
:
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
派生的自定義類型,並指定AnsiString
SQL類型:
public class UriAnsiStringType : UriType
{
public UriAnsiStringType()
: base(new AnsiStringSqlType())
{ }
public override string Name
{
get { return "UriAnsiStringType"; }
}
}
同樣的解決方案可以正常工作; 您可以將字符串屬性定義為私有,因此不會向任何人公開。
流暢的NHibernate不像標准HBM文件那樣容易處理,但它可以通過幾種方式完成。 有關說明,請參閱Fluent NHibernate Wiki 。
或者,我認為你必須定義一個IUserType類,它可以將值加載/保存為字符串。 使用Fluent NHibernate執行此操作的示例可以在本博文的最后找到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.