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

枚举解析似乎不适用于Fluent NHibernate

枚举解析是一种在编程中常用的技术,用于将枚举类型的值转换为对应的可读字符串或其他数据类型。然而,在Fluent NHibernate中,枚举解析似乎不适用。

Fluent NHibernate是一个用于简化NHibernate配置的开源库,它提供了一种流畅的API来定义实体映射和查询。在Fluent NHibernate中,枚举类型的映射通常使用自定义类型转换器来处理。

要在Fluent NHibernate中处理枚举类型,可以使用IUserType接口来创建自定义类型转换器。以下是一个示例:

首先,创建一个实现IUserType接口的自定义类型转换器:

代码语言:csharp
复制
public class EnumTypeConverter<T> : IUserType
{
    public object NullSafeGet(IDataReader rs, string[] names, object owner)
    {
        var value = NHibernateUtil.String.NullSafeGet(rs, names[0]);
        if (value == null)
            return null;

        return Enum.Parse(typeof(T), (string)value);
    }

    public void NullSafeSet(IDbCommand cmd, object value, int index)
    {
        if (value == null)
        {
            ((IDataParameter)cmd.Parameters[index]).Value = DBNull.Value;
        }
        else
        {
            ((IDataParameter)cmd.Parameters[index]).Value = value.ToString();
        }
    }

    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[] { NHibernateUtil.String.SqlType }; }
    }

    public Type ReturnedType
    {
        get { return typeof(T); }
    }

    public bool IsMutable
    {
        get { return false; }
    }

    public new bool Equals(object x, object y)
    {
        if (ReferenceEquals(x, y))
            return true;

        if (x == null || y == null)
            return false;

        return x.Equals(y);
    }

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

然后,在映射文件中使用自定义类型转换器:

代码语言:csharp
复制
public class MyEntityMap : ClassMap<MyEntity>
{
    public MyEntityMap()
    {
        Map(x => x.MyEnumProperty)
            .CustomType<EnumTypeConverter<MyEnum>>();
    }
}

在上述示例中,我们创建了一个名为EnumTypeConverter的自定义类型转换器,并将其应用于MyEntity类的MyEnumProperty属性的映射中。

需要注意的是,Fluent NHibernate并没有提供内置的枚举解析功能,因此我们需要自己实现一个自定义类型转换器来处理枚举类型的映射。

这是一个基本的示例,你可以根据自己的需求进行修改和扩展。希望对你有帮助!

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

相关·内容

Fluent NHibernate之旅二--Entity Mapping

如果你要亲手试验一下,可以先看一下“Fluent NHibernate之旅一”,进行一下数据库和SessionFactory的准备。...Created, Paied, Consignment, Complete, } 稍微简单介绍下,订单有订单号、总价、订单状态、创建时间等属性,状态现在是int类型,过后我演示一下如何使用枚举型...对于我这种新手来说,Fluent更适合我,因为我可以用它来进行学习NHibernate。 映射做好了,接下来我们在NHibernate中把映射加到配置中。...当然还有更多的方法,如果大家想了解的话,可以看一下Fluent NHibernate API Document。...前几天的开篇“Fluent NHibernate之旅一”,反响不是很好,或许大家用NHibernate的真的很少,或许我写的不够好,或许。。。。

1K90

如何使用Fluent Nhibernate中的Automapping进行OR Mapping映射

由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。...NHibernate的Mapping方式代替XML配置。...使用Fluent NHibernate的最大好处是降低了出错的机会,因为Fluent Nhibernate的配置是使用C#来编写,可以智能感知,而且还能编译,不像原始的XML配置,写错了都不知道。...更多的修改意味着更多的风险,为了减少这方面的风险,同时为了减少配置的工作量,所以在最新的项目中采用了Fluent NHibernate中的Automapping。...(比如Course和Student是多对多关系,那么产生的中间表表名为COURSE_STUDENT) 对于枚举,在数据库中使用tinyint也就是一个Byte来存储,枚举在Automapping中作为UserType

1.1K10
  • Fluent NHibernate RC 1.0 --升级内容

    Fluent NHibernate Release Notes 1.0 : http://wiki.fluentnhibernate.org/Release_notes_1.0 FNT在映射的时候,分为...Fluent Mapping(手动)和Auto Mapping(自动)两种方式,我在我的“Fluent系列”中一直使用的是手动方式,我觉得相对应的好控制,而且也让我同时能更好的学习NHibernate。...Fluent Mapping 1、修改一些方法名:把一些繁琐的方法名改的相对的简单而不失其含义。...2、丢弃了SetAttribute方法:因为前几个版本的FNT还不够完善,很多NHibernate的Attribute都没有提供支持,所以作者留了这一个方法,以便开发者自定义一些attribute。...不过还有不完美的,DiscriminatorValue(string value)这个方法,如果我们的标识符是字符串类型,那还好,但像我这种枚举类型的,不得不硬编码了。

    64950

    Fluent NHibernate之旅(三)-- 继承

    经过了“开篇”和“简单映射”两篇文章,相信大家对Fluent NHibernate 有了一定的了解了,FluentNHibernate实际就是对 NHibernate 映射的一定扩展,我们能完全利用强类型...从这一篇开始,我们将使用Fluent NHibernate RC 1.0 版来进行演示,先前的代码,我会另外进行说明 继承 在OOP中,继承作为OO中重要的特性,如果NHibernate没有对它的支持,...因为需要标识符,所以我们必须添加一个标识符,我这里使用枚举类型来表示,代码改变成如下: public enum ProductType { Mobile, Book } public...Fluent 映射如下: public class ProductMap : ClassMap { public ProductMap() { Id(p...总结 这次说了一下继承的映射方式,其实很早就写好了,正好遇到Fluent NHibernate发布了RC版,所以用了一些时间去学习了下,总的来说,这次升级呢非常好,可能会存在更多的bug,但不影响我们的正常使用

    69480

    听GPT 讲Rust源代码--compiler(5)

    这个枚举类型的目的是为了更好地组织和解析文档注释的内容。 另一个枚举类型是MalformedGenerics,它用于表示文档注释中存在错误的泛型参数。...BodyResolver是一个枚举类型,用于解析Rust语言中函数体的引用。它有几个变体,包括: DefIndex: 表示函数体的定义索引,用于查找和解析函数体。...这些类型用于表示Fluent的不同组成部分,例如字符串、参数、属性、模式等。 然后,fluent.rs文件实现了fluent!宏的解析和处理逻辑。当开发者使用fluent!...宏定义Fluent字符串时,rustc_fluent_macro会解析宏参数中的Fluent语法,并将其转化为对应的结构体和枚举类型。 fluent!...宏的解析逻辑非常复杂,涉及到对嵌套的Fluent表达式、条件语句、选择语句等的处理。解析后,fluent!宏会生成一个对应的Rust函数,该函数将根据Fluent语法的要求进行字符串的处理和本地化。

    13010

    让OData和NHibernate结合进行动态查询

    但是在项目有时我们并没有采用Entity Framework,而是采用的NHibernate,那么该怎么用OData呢? 经过一段时间的Google和研究,终于找到了一个好的方案。...在OData API查询时,用户前端是url跟参数,但是在服务器端,我们是接收到的是一个ODataQueryOptions对象,其实我们需要做的就是把这个对象进行解析,生成NHibernate能够理解的查询形式...SourceControl/changeset/view/72014f4c779e#Samples/WebApi/NHibernateQueryableSample/System.Web.Http.OData.NHibernate.../NHibernateFilterBinder.cs Filter和OrderBy属性都会被转换成HQL,然后我们就需要进行NHibernate的查询了。...但是似乎OData并不支持返回这样的数据类型,OData支持的是Entity的List,如果我们重新定义了一个对象QueryResult: [DataContract]    public class

    40410

    渗透测试之Vulnhub-DC2

    IP地址的解析。...wpscan --url http://dc-2 -e u –url:指定网站的url -e:枚举 u:枚举用户名 -U:爆破时指定的用户名 -P:爆破时指定的密码字典 结果: Password...这里简单说一下,cewl工具就是爬取网站信息然后生成一个用于爆破用户名密码的字典,这里写下生成密码的payload,其他用法及详细介绍还请师傅们百度一下。.../bin/bash 我理解的是因为git具有root权限,所以直接进入git交互界面,需要输出信息比较多的,其他选项好像都不适用,然后再在git缓冲区调用bash,这样就是以root身份调用的shell...不过需要说一下的是,我用的ssh终端是Fluent Terminal,进入git缓冲区交互界面需要小窗,全屏窗口会直接输出全部内容,无法进入缓冲区。

    39210

    教程 | 十分钟学会函数式 Python

    在Python中一下子从不懒惰的函数求值转换到懒惰的函数似乎有点不适应。但如果你能用函数式的思维而不是过程式的思维,那么最终会适应的。 这个“square(num)”的确不错,但总觉得有点不对劲。...关于为何函数式编程不适合Python生态系统曾有过一次讨论。你也许注意到,我之前提到了列表解析式,我们现在就来介绍下什么是列表解析式。...用列表解析式只需写成: x = range(-5, 5) all_less_than_zero = [num * num for num in x if num < 0] 不过列表解析式只能用于列表...映射和过滤能用于一切可迭代对象。那为什么还要用列表解析式呢?其实,解析式可以用在任何可迭代的对象上。 其他解析式 可以在任何可迭代对象上使用解析式。 任何可迭代对象都可以用解析式生成。...# Taken from page 70 chapter 3 of Fluent Python by Luciano Ramalho DIAL_CODES = [ (86, 'China'),

    59930

    教程 | 十分钟学会函数式 Python

    在Python中一下子从不懒惰的函数求值转换到懒惰的函数似乎有点不适应。但如果你能用函数式的思维而不是过程式的思维,那么最终会适应的。 这个“square(num)”的确不错,但总觉得有点不对劲。...关于为何函数式编程不适合Python生态系统曾有过一次讨论。你也许注意到,我之前提到了列表解析式,我们现在就来介绍下什么是列表解析式。...用列表解析式只需写成: x = range(-5, 5) all_less_than_zero = [num * num for num in x if num < 0] 不过列表解析式只能用于列表...映射和过滤能用于一切可迭代对象。那为什么还要用列表解析式呢?其实,解析式可以用在任何可迭代的对象上。 其他解析式 可以在任何可迭代对象上使用解析式。 任何可迭代对象都可以用解析式生成。...# Taken from page 70 chapter 3 of Fluent Python by Luciano Ramalho DIAL_CODES = [ (86, 'China'),

    60620

    教程 | 十分钟学会函数式 Python

    在Python中一下子从不懒惰的函数求值转换到懒惰的函数似乎有点不适应。但如果你能用函数式的思维而不是过程式的思维,那么最终会适应的。 这个“square(num)”的确不错,但总觉得有点不对劲。...关于为何函数式编程不适合Python生态系统曾有过一次讨论。你也许注意到,我之前提到了列表解析式,我们现在就来介绍下什么是列表解析式。...用列表解析式只需写成: x = range(-5, 5) all_less_than_zero = [num * num for num in x if num < 0] 不过列表解析式只能用于列表...映射和过滤能用于一切可迭代对象。那为什么还要用列表解析式呢?其实,解析式可以用在任何可迭代的对象上。 其他解析式 可以在任何可迭代对象上使用解析式。 任何可迭代对象都可以用解析式生成。...# Taken from page 70 chapter 3 of Fluent Python by Luciano Ramalho DIAL_CODES = [ (86, 'China'),

    57020

    听GPT 讲Rust源代码--srctools(21)

    这个trait提供了一些用于符号解析的方法。 Dlsym是一个枚举类型,它定义了不同类型的dlsym函数调用。...fluent_alphabetical.rs文件是一个Rust工具,它用于对这些.in文件进行排序,以便符号顺序在不同环境下保持一致,从而更容易进行比较和查找。...具体来说,fluent_alphabetical.rs 文件实现了以下功能: 读取 .in 文件的内容。 解析文件中的占位符和文本内容。 对解析后的内容进行排序,主要是对占位符所代表的符号进行排序。...ParseVersionError枚举用于表示解析版本号时可能出现的错误情况。该枚举有两个变体:Missing和Invalid....pub async fn parse_version函数:该函数用于解析给定的版本号字符串并返回相应的Version枚举变体。

    15910

    ANSYS ICEM CFD——网格划分基础知识

    FLUENT划分网格的途径 1、一种是用FLUENT提供的专用网络软件GAMBIT进行网络划分; 2、另一种则是由其他的CAD软件完成造型工作,再导入GAMBIT中生成网格。...还可以用其他网格生成软件生成与FLUENT兼容的Pro/E,SolidWorks,Solidedge等。除了GAMBIT外,可以生成FLUENT网格的网格软件还有ICEM CFD、GridGen等。...FLUENT(Gambit)可以划分的网格类型 FLUENT可以划分: 二维:三角形和四边形网格 三维:四面体网格、六面体网格、金字塔型网格、楔形网格,以及由上述网格类型构成的混合型网格。...平面网格可用于流体力学二维数值计算;壳网络既可以用于固体力学的数值计算,也可以作为生成非结构三维体网格的边界。下面首先介绍ICEM中壳/面网格的基本概念。...4)Shrinkwrap,是一种笛卡尔网络生成方法,会忽略大的几何特征、沟、洞等,适用于复杂“不干净”的几何模型快速生成壳网络,不适合薄板类实体网络生成。

    2.7K10
    领券