首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Fluent NHibernate将List <string>映射到分隔的字符串

作为一个云计算领域的专家,我可以为您提供关于使用Fluent NHibernate将List<string>映射到分隔的字符串的解决方案。

首先,我们需要了解Fluent NHibernate是一个用于简化NHibernate映射的库,它允许我们使用LINQ查询和Fluent API来配置映射。NHibernate是一个.NET平台的对象关系映射(ORM)框架,它允许我们将对象映射到数据库中的表。

要将List<string>映射到分隔的字符串,我们可以使用Fluent NHibernate的自定义类型映射功能。以下是一个示例:

  1. 首先,我们需要创建一个自定义类型,用于将List<string>映射到分隔的字符串:
代码语言:csharp
复制
public class StringListType : IUserType
{
    public new bool Equals(object x, object y)
    {
        return object.Equals(x, y);
    }

    public int GetHashCode(object x)
    {
        return x.GetHashCode();
    }

    public object NullSafeGet(IDataReader rs, string[] names, object owner)
    {
        var value = NHibernateUtil.String.NullSafeGet(rs, names[0]);
        if (value == null)
        {
            return new List<string>();
        }

        return ((string)value).Split(',').ToList();
    }

    public void NullSafeSet(IDbCommand cmd, object value, int index)
    {
        if (value == null)
        {
            ((IDataParameter)cmd.Parameters[index]).Value = DBNull.Value;
        }
        else
        {
            var strings = (List<string>)value;
            ((IDataParameter)cmd.Parameters[index]).Value = string.Join(",", strings);
        }
    }

    public object DeepCopy(object value)
    {
        return value;
    }

    public object Replace(object original, object target, object owner)
    {
        return original;
    }

    public object Assemble(object cached, object owner)
    {
        return cached;
    }

    public object Disassemble(object value)
    {
        return value;
    }

    public SqlType[] SqlTypes
    {
        get
        {
            return new[] { new SqlType(DbType.String) };
        }
    }

    public Type ReturnedType
    {
        get
        {
            return typeof(List<string>);
        }
    }

    public bool IsMutable
    {
        get
        {
            return true;
        }
    }
}
  1. 接下来,我们需要在Fluent NHibernate的映射配置中使用这个自定义类型:
代码语言:csharp
复制
public class MyClassMap : ClassMap<MyClass>
{
    public MyClassMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.StringList).CustomType<StringListType>().Column("StringListColumn");
    }
}

在上面的代码中,我们将StringList属性映射到名为"StringListColumn"的数据库列,并使用我们创建的StringListType类型来将List<string>映射到分隔的字符串。

现在,当我们使用NHibernate查询或保存MyClass对象时,StringList属性将自动映射到分隔的字符串。

希望这个答案能够帮助您解决问题。如果您有任何其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Fluent Nhibernate之旅(五)--利用AutoMapping进行简单开发

    Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate书中也相应推荐了使用FN来进行映射配置,之前写FN之旅至今还有很多人会来私信我问题,说来惭愧,从...NHibernate之旅(四)-- 关系(下) 安装 现在在项目中使用FN很方便,使用Nuget管理就可以了,但我还是建议大家,可以下载源代码,自己可以详细了解下。...,ORM最大好处就是我们可以随意变更我们数据库类型,不需要考虑其类型,这是我选择Nhibernate原因,EF虽然通过扩展能够支持其他数据库,但我相信用EF使用其他数据库的人很少吧。...刚我们测试报错,是因为Employee中Name是个UserName类,NhibernateComponent,我在FN之旅四(上)中有介绍到,默认情况下映射根据字段映射到数据库,所以上面的测试会报错...Fluent Nhibernate确实是个好东西,让我在开发上省去了很多时间,今天虽然介绍了AutoMapping,但我不推荐您在您项目中使用,用起来没手感(个人感觉),需要约定东西太多了,对于数据库结构也得按照他契约来

    97060

    Fluent NHibernate之旅(四)-- 关系(中)

    Fluent NHibernate之旅系列导航: 一、开篇:ISessionFactory Configuration 二、实体映射:Entity Mapping 三、继承映射:Inheritence...映射 不得不赞叹一下 Fluent Nhibernate ,有了它,我们映射一切都变得如此简单,先来看看Model吧,用户订单列表,对于用户来说,暂时是不需要排序,所以我们可以使用ISet作为Order...一对多映射,比起一对一来说还相对简单点,默认是延迟加载,如果项目中,有些地方,需要立即加载,我们也可以使用 FetchMode.Eager 来加载。...我们在Output中,能看到NHibernate生成Sql语句,测试也成功,说明我们刚刚是立即加载了Orders属性。...如果您在使用Fluent Nhibernate时候也遇到了问题,可以及时与我联系或求助于Fluent Google Groups。 应“亦续缘”要求,我把代码整理了下,发上来,便于大家学习。

    719100

    如何使用Fluent NhibernateAutomapping进行OR Mapping映射

    ,我们使用Fluent NHibernateMapping方式代替XML配置。...使用Fluent NHibernate最大好处是降低了出错机会,因为Fluent Nhibernate配置是使用C#来编写,可以智能感知,而且还能编译,不像原始XML配置,写错了都不知道。...Fluent NHibernate配置方式仍然是需要编写Mapping代码,也就意味着,如果我更改class或者DataTable时候,还要对应更改该Mapping文件。...更多修改意味着更多风险,为了减少这方面的风险,同时为了减少配置工作量,所以在最新项目中采用了Fluent NHibernateAutomapping。...对于多对多关系,把两个类对应表名进行排序,排前面,然后两个表名连接起来,中间使用“_”分割。

    1.1K10

    Fluent NHibernate之旅(四)-- 关系(上)

    经过了前面三篇介绍,相信大家对Fluent NHibernate已经有一定了解了,在我们学习中,Fluent 也已经进入了RTM版本。...这次版本发布离RC版只有半个月不到,修正了很多bug,同时补充了大量功能,在每天更新中,也看到了大量单元测试,我们相信Fluent NHibernate 已经相对稳定成熟了。...Mapping 今天我们说一下ORM中R映射,我们现在数据库大多都是关系型数据库了,所以可以说关系在我们数据库设计中也是非常重要部分,NHibernate也非常重视这一块,但在传统方式中,配置就比较麻烦...,不是说我们Fluent能简单,只是传统方式xml看上去不太美观,而Fluent这种代码式方式,更能符合我们Developer习惯。...(); 虽然Fluent支持,虽然编译通过,但在创建ISessionFactory时候,却会抛出异常,因为NHibernate不支持one-to-oneLazy特性,也就是说NHibernate不支持一对一延迟加载

    1.2K60

    Fluent NHibernate RC 1.0 --升级内容

    Fluent NHiberante(FNT) RC 1.0 已经在上个星期发布了,其中很多东西被废弃,有些方法改进,还有一些命名更贴切,虽说不是很完美,但已经做非常完善了,如果大家在使用中,发现bug...Fluent NHibernate Release Notes 1.0 : http://wiki.fluentnhibernate.org/Release_notes_1.0 FNT在映射时候,分为...Fluent Mapping(手动)和Auto Mapping(自动)两种方式,我在我Fluent系列”中一直使用是手动方式,我觉得相对应好控制,而且也让我同时能更好学习NHibernate。...Fluent Mapping 1、修改一些方法名:把一些繁琐方法名改相对简单而不失其含义。...不过还有不完美的,DiscriminatorValue(string value)这个方法,如果我们标识符是字符串类型,那还好,但像我这种枚举类型,不得不硬编码了。

    65050

    Fluent NHibernate之旅二--Entity Mapping

    今天跟上一篇一样,会使用传统方式和 NHibernate 进行讲解。...本节内容: 简单实体映射 使用自定义类型映射实体属性 NHibernate实体映射(Entity Mapping)做非常好,虽然不是完美,但一些我们经常使用,基本上已经都支持了,而且配置也相对比较简单...二、使用自定义类型映射实体属性 NHibernate支持我们用自定义类型来映射属性,但因为我是初学,我真的不会,当然我在网上找到了相关资料,在此也不多说,就说说Fluent方式吧,在我映射自定义属性时候...为了接下来方便,我把FluentMapping都生成到我传统方式Mapping目录中,加入到项目,设置成嵌入资源,一切都为了以后教程,换句话说以后教程中,我一般都会使用Fluent来进行映射...前几天开篇“Fluent NHibernate之旅一”,反响不是很好,或许大家用NHibernate真的很少,或许我写不够好,或许。。。。

    1K90

    Fluent NHibernate之旅(三)-- 继承

    经过了“开篇”和“简单映射”两篇文章,相信大家对Fluent NHibernate 有了一定了解了,FluentNHibernate实际就是对 NHibernate 映射一定扩展,我们能完全利用强类型...从这一篇开始,我们将使用Fluent NHibernate RC 1.0 版来进行演示,先前代码,我会另外进行说明 继承 在OOP中,继承作为OO中重要特性,如果NHibernate没有对它支持,...在子类中,我们必须制定对应标识符值,这里又出现败笔了,只能设定string类型,My God,变相SetAttribute,我觉得这个已经脱离了Fluent称号了(在RC升级介绍中已经说明)。...总结 这次说了一下继承映射方式,其实很早就写好了,正好遇到Fluent NHibernate发布了RC版,所以用了一些时间去学习了下,总的来说,这次升级呢非常好,可能会存在更多bug,但不影响我们正常使用...,而且现在更新也非常快,后面几张可能说下几种不常见映射和会遇到些麻烦,不过感觉园子里使用NHibernate的人不太多,关注度不多,不过不影响我继续写下去决心,这次也很偶然接触了FNT,确实有好多好地方可以借鉴一下

    69680

    Fluent NHibernate之旅

    本篇内容: 1、初识Fluent NHibernate(简称Fluent) 2、使用NHibernateFluent创建ISessionFactory 3、传统方式和Fluent对比。...2、下载NHibernate类库,虽然Fluent已经有了最新版本,但我们还需要ProxyDll,这里我们使用NHibernate.ByteCode.Castle这个程序集。...传统方式对于一些经常使用程序员来说非常简便,加上代码生成工具,使用起来也会游刃有余,但对于新手来说,Fluent绝对是一个好帮手。...当然不,Fluent开发者不仅帮你保留了原有的方式,还可以混合你配置文件,最有意思时,你还可以使用它来学习NHibernate,甚至可以使用它来开发你自己自动代码生成工具,因为我也刚学,先介绍一些简单...使用NHibernate配置      也就是你可以按照原先方式进行配置,而读取呢使用Fluent来读取,然后创建SessionFactory,或许你感觉这不是多余了嘛,那是因为还没有讲到Mapping

    1.1K60

    NHibernate总结

    现在项目中数据访问使用NHibernate一个ORM框架,小弟也是在后期加入项目组,之前对NHibernate就一直没有接触过,所以一直在学习NHibernate,都是一些很基础一些东西,写出来总结一下...对象关系映射(O/R Mapping,Object Relational Mapping)表示一种技术,用来把对象模型表示对象映射到基于SQL 关系模型数据结构中去。...NHibernate不仅仅管理.NET 类到数据库表映射(包括.NET 数据类型到SQL 数据类型映射),还提供数据查询和获取数据方法,大幅度减少我们开发时人工使用SQL和ADO.NET处理数据时间...开始使用NHibernate 我们亲自动手,一步一步实现一个NHibernate简单程序来,我只实现了简单增删改查功能。...封装Nhibernate底层操作,People.cs为实体类,People.hbm.xml为映射文件(把数据库表People映射到实体类People)。

    92540

    NHibernate学习笔记之一,Hello world!

    NHibernate是一个面向.NET环境对象/关系数据库映射框架,主要应用在数据持久层,和其它ORM框架一样用来把对象模型表示对象映射到基于SQL关系模型数据结构中去。...准备工作: 需要使用.NET Framework 2.0或上以版本框架,准备NHibernate框架,本文使用3.3版,到目前NHibernate都还是基于.net framework 2.0,官方下载地址...2、新建项目并添加引用,NHibernate-3.3.0.GA-bin中“Iesi.Collections.dll”与“NHibernate”引用到项目中,如图2所示复制Configuration_Templates...文件夹中对应数据库配置文件,这里使用MSSQL,所以复制“MSSQL.cfg.xml”,并对NHibernate配置信息适当修改 。...对当前使用MSSQL数据库配置文件物理路径             string configPath = HttpContext.Current.Server.MapPath("~/MSSQL.cfg.xml

    60020

    NHibernate教程

    大家好,又见面了,我是你们朋友全栈君。 一、NHibernate简介 在今日企业环境中,把面向对象软件和关系数据库一起使用可能是相当麻烦、浪费时间。...NHibernate除了能将一张表映射为一个对象,还可以表间关系变为对象属性。例如学生和课程间多对多关系就可以转化为学生类中一个课程集合属性。...二、NHibernate使用步骤 1.为系统引入NHibernate库,并且配置NHibernate; 2.新建一个将要持久化.Net对象表; 3.构建一个需要被持久化.Net类; 4.构建一个可以让...NHibernate知道如何完成ORM映射XML文件; 5.使用NHibernateAPI来编程 三、NHibernate使用 1....> (2)然后NHibernate唯一一个dll(NHibernate.dll)添加到工程引用中,步骤如下: à à 2.

    36910

    Nhibernate入门与demo

    学习和使用Nhibernate已经很久了,一直想写点东西和大家一起学习使用Nhibernate。博客园里也有很多大牛写了很多关于Nhibernate入门文章。...3、怎么搭建Nhibernate?      4、怎么使用Nhibernate?      好,我们就带着这几个问题开始我们Nhibernate旅程。    ...先看一张经典图:      ORM:对象关系映射(O/R Mapping,Object Relational Mapping)表示一种技术,用来把对象模型表示对象映射到基于SQL 关系模型数据结构中去...通俗讲,就是我们操作实体类,然后让ORM框架自动映射到数据库中。      而Nhibernate就是:.Net环境下实现ORM技术一个框架!     ...第四个问题:         使用和测试你配置【可以爽一把了!】

    35430

    EntityFramework Core 学习扫盲

    添加实体和映射数据库 使用EF CORE中添加实体,约束属性和关系,最后将其映射到数据库中方式有两种,一种是Data Annotations,另一种是Fluent Api,这两种方式并没有优劣之分,全凭开发者喜好和需求...包含和排除实体类型 实体在Context中映射到数据库有多种方式: 使用DbSet定义属性。 在OnModelCreating方法中使用Fluent Api配置。...少数几个CLR类型在不做处理情况下,映射到数据库中时存在可空选项,如string,int?,这种情况也在下列方式中做了说明。...索引 EF CORE中索引概念和关系型数据库中索引概念没有什么不同,比如在Sql Server,Blog映射到数据库时,将为BlogId建立主键默认持有的聚集索引,Post映射到数据库中时,将为...如新增Blog时,blog_type列写入blog_base字符串,新增RssBlog时,blog_type列写入blog_rss字符串

    9.6K90

    Nhibernate_nhibernate与ef区别

    步骤1:创建数据库表 我们正在做是一个非常简单NH示例.在这个例子里面,我们实现一个基本用户管理子系统.我们将会使用一个user表(sql server 2000): use NHibernate...让我们返回到"id" tag,你可能会猜想这个tag和映射到Primary Key有关.正确.ID tag格式和Property tag相似.我们从Property(name)映射到目标数据库字段...我们对象将自己生成key"(User对象总是需要一个UserID),如果你乐意让NH代替你生成,你会对uuid.hex和uuid.string类感兴趣(参看chm文档)....驱动,连接到本地nhibernate数据库,并且使用提供用户和密码.还会有其他配置项,你可以参看文档....在代码里面使用NHibernate是很简单事情: 1. 创建一个Configuration对象. 2.

    59330

    C# 数据操作系列 - 11 NHibernate 配置和结构介绍

    前言 今天是NHibernate第二篇内容,通过上一篇内容,我们初步了解了NHibernate创建和使用。这一篇,我继续探索NHibernate背后秘密。嗯,就是这样。 1....这一节,将带领大家看一下NHibernate中我们常用配置,因为配置项有很多,但一大部分通常情况都遇不到使用时候。...dialect 数据库方言,表示NHibernate连接数据库是什么,该用哪种格式解析关系映射到数据库SQL语句 default_schema 默认schema,用来设置连接字符串连接数据库默认...填继承自 IConnectionProvider 实现类 connection.connection_string 数据库连接字符串 connection.connection_string_name...数据库连接字符串名称,指的是配置在程序配置文件中 connectionStrings节点数据连接字符串

    1.2K20
    领券