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

rip*_*234 5 .net c# nhibernate orm fluent-nhibernate

(请参阅LINQ-to-SQL的相关问题)

我想使用NHibernate 将具有URI成员的类映射到string列.我究竟该如何实现这一目标?

我不认为给出相关问题的解决方案在这里工作 - 我不能声明私有字段并映射它,因为映射需要引用该字段.

mat*_*ttk 9

除非你需要做一些特殊的事情,UriTypeNHibernate提供的工作(我不知道它引入了什么版本 - 我使用的是3.1.4000).无需编写自定义用户类型.

类映射

您可以UriTypeClassMap<>:

public class ImportedWebImageMap : ClassMap<ImportedWebImage>
{
    public ImportedWebImageMap()
    {
        Id(x => x.Id);
        Map(x => x.SourceUri).CustomType<UriType>();
    }
}
Run Code Online (Sandbox Code Playgroud)

财产公约

您可以使用属性约定来映射Uri要使用的所有属性UriType:

public class UriConvention : IPropertyConvention
{
    public void Apply(IPropertyInstance instance)
    {
        if (typeof(Uri).IsAssignableFrom(instance.Property.PropertyType))
            instance.CustomType<UriType>();
    }
}
Run Code Online (Sandbox Code Playgroud)

存储为varchar

如果要将Uri数据库存储为数据库varchar而不是默认值nvarchar,则可以创建从中派生的自定义类型UriType并指定AnsiStringSQL类型:

public class UriAnsiStringType : UriType
{
    public UriAnsiStringType()
        : base(new AnsiStringSqlType())
    { }

    public override string Name
    {
        get { return "UriAnsiStringType"; }
    }
} 
Run Code Online (Sandbox Code Playgroud)