簡體   English   中英

在Fluent NHibernate中將URI映射到字符串

[英]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>();
    }
}

存儲為varchar

如果要將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM