首页
学习
活动
专区
圈层
工具
发布

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

Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅至今还有很多人会来私信我问题,说来惭愧,从...在NuGet下载FluentNhibernate后,会自动下载安装Nhibernate及Iesi。...这个其实就是AutoMapping在处理映射的时候,都是按照一定的规则去映射的,细心的朋友可能发现,我们的索引字段的字段名都是Id,这就是AutoMapping的约定,我们也可以自己来进行配置。...Fluent Nhibernate确实是个好东西,让我在开发上省去了很多时间,今天虽然介绍了AutoMapping,但我不推荐您在您的项目中使用,用起来没手感(个人感觉),需要约定的东西太多了,对于数据库结构也得按照他的契约来...但在开发一些小工具时,又要用到小型存储数据的话,不妨可以试试这种方式。 PS:今天本来心情不错,没想到有客人来拉横幅,一直在公司吵闹,害的我无法集中精力,估计在文章中会有错的地方,大家见谅了。

1.3K60

连贯NHibernate 1.0正式发布

连贯NHibernate(Fluent NHibernate) 是通过编程方式而不是使用XML配置文件创建NHibernate映射的API。...它的目标是在项目中运用NHibernate时减少所遇到的困难,提供更好的可读性、可测试性和编译时的安全性。...连贯NHibernate降低了复杂性,并进一步加强了约定胜于配置的原则,即任何一个映射的最常用设置是默认的。 除了编译时的检查外连贯NHibernate还为你的映射的测试提供了一个健壮的API。...连贯NHibernate 1.0已经正式发布,可以从这里获取http://fluentnhibernate.org/downloads ,更详细信息参看Wiki:http://wiki.fluentnhibernate.org...[原创]Fluent NHibernate之旅(三)—继承 codeproject上也有一篇针对RC的文章:Fluent NHibernate and Linq2NHibernate – Demo Project

92870
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++:44---关键字virtual、override、final

    一、虚函数 概念:在函数前面加virtual,就是虚函数 虚函数的一些概念: 只有成员函数才可定义为虚函数,友元/全局/static/构造函数都不可以 虚函数需要在函数名前加上关键字virtual 成员函数如果不是虚函数...,其解析过程发生在编译时而非运行时 派生类可以不覆盖(重写)它继承的虚函数 重写(覆盖)的概念与规则 派生类重写(覆盖)基类中的函数,其中函数名,参数列表,返回值类型都必须一致,并且重写(覆盖)的函数是...: 覆盖与隐藏都是子类出现与父类相同的函数名,但是有很多的不同 隐藏可以适用于成员变量和函数,但是覆盖只能用于函数 覆盖(重写)在多态中有很重要的作用 四、virtual、override关键字 virtual...: 如果派生类调用虚函数没有覆盖默认实参,那么使用的参数是基类虚函数的默认实参;如果覆盖了虚函数的默认实参,那么就使用自己传入的参数 派生类可以改写基类虚函数的默认实参,但是不建议,因为这样就违反了默认实参的最初目的...方法是通过域运算符来实现 通常,只有成员函数(或友元)中的代码才需要使用作用域运算符来回避虚函数的机制 什么时候需要用到这种回避虚函数的机制: 通常,基类定义的虚函数要完成继承层次中所有的类都要完成的共同的任务

    4.9K42

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

    前言 今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用。这一篇,我继续探索NHibernate背后的秘密。嗯,就是这样。 1....ISessionFactory - NHibernate.ISessionFactory: 一个基于单数据库的已编译的映射缓存,它是持久不变的且线程安全(额,这句话是从它的文档翻译过来的)。...只要ISession关闭了,这些对象就可以被分离出来然后可以在应用层的任意地方使用。...这一节,将带领大家看一下NHibernate中我们常用的配置,因为配置项有很多,但一大部分通常情况都遇不到使用它的时候。...其中create表示每次只创建新增的;create-drop表示每次ISessionFactory创建时创建表 ,ISessionFactory关闭时,删除表;其中update表示每次都会将DDL SQL

    1.8K20

    Python 工匠:写好面向对象代码的原则(中)

    在这篇文章中,我将继续介绍 SOLID 原则的第三位成员:L(里氏替换原则)。 里氏替换原则与继承 在开始前,我觉得有必要先提一下 继承(Inheritance)。...出处: Liskov substitution principle - Wikipedia 如果把它比较通俗的翻译过来,大概是这样:当你使用继承时,子类(派生类)对象应该可以在程序中替代父类(基类)对象使用...子类继承父类,然后重写父类的少量行为,这看上去正是类继承的典型用法。但不幸的是,这段代码违反了“里氏替换原则”。具体是怎么回事呢?让我们来看看。...有一位新成员最近加入了项目开发,她需要实现一个新函数来获取与用户有关的所有帖子数量。...让我们最后再总结一下吧: “L:里氏替换原则”认为子类应该可以任意替换父类被使用 在类的使用方增加具体的类型判断(isinstance),通常不是最佳解决方案 违反里氏替换原则,通常也会导致违反“开放-

    1.3K10

    202453学习笔记:派生类的默认成员函数

    6个默认成员函数,“默认”的意思就是指我们不写,编译器会变我们自动生成一个,那么在派生类 中,这几个成员函数是如何生成的呢?...一.构造函数 一般无参构造函数,以及全缺省构造函数和编译器生成的构造函数都叫做默认构造函数, 继承后,派生类里有了父类的成员,但没有实例化对象,也只是一个类而已,所以在用派生类实例化对象时也要创建父类来去实例化...要明确的是,继承关系里,先有父类,派生类才能去继承,所以派生类的构造函数必须要遵守先父后子的原则,必须调用基类的构造函数初始化基类的那一部分成员。...此外,父类的赋值重载会和派生类的赋值重载构成隐藏,因此使用时要注意 三.析构函数 派生类的析构函数会在被调用完成后自动调用基类的析构函数清理基类成员。...但是因为后续一些场景析构函数需要构成重写,重写的条件之一是函数名相同(这个我们后面会讲 解)。

    33410

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

    由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。...最早的项目中,我们使用了最传统的XML配置文件的方式编写映射关系,但是这样太麻烦,每次修改class和表时都要去修改对应的XML文件,而且还容易出错,一定有疏忽遗漏的地方,还不容易找出错误,所以在第二个项目中...使用Fluent NHibernate的最大好处是降低了出错的机会,因为Fluent Nhibernate的配置是使用C#来编写,可以智能感知,而且还能编译,不像原始的XML配置,写错了都不知道。...我们只需要定义好映射的规则,就可以不对每个表和类分别编写映射配置,而是按照规则进行自动的Mapping工作。这样在修改class或者DataTable时,只需要修改类和表即可,不需要再修改配置文件。...这里就需要重写DefaultAutomappingConfiguration类,在该类中指定主键、Discriminate的类等,具体代码如下: public class AutoMapConfiguration

    1.9K10

    重写 equals() 为什么必须重写 hashCode()?

    因为基本类型的值存储在栈中(局部变量)或堆中(成员变量),不存在“引用”概念,比较逻辑直观。...二、equals():从“地址比较”到“内容比较”的演变equals() 是 java.lang.Object 类中的方法,所有 Java 类都默认继承该方法,其核心逻辑与 == 绑定,但可通过重写实现自定义比较规则...手动重写 hashCode() 需注意哈希值的均匀性(减少冲突),推荐使用 Objects.hash()方法(JDK 7+),它会自动处理字段空值,且能基于多个字段生成哈希值,简洁又安全。...四、常见误区与使用建议1. 误区 1:equals() 相等,hashCode() 却不同这是最常见的错误,本质是违反约定,会导致集合操作异常,解决方式就是同步重写两个方法,基于相同字段计算逻辑。...误区 3:重写 hashCode() 时使用随机值若 hashCode() 返回随机值,会导致同一对象每次调用 hashCode() 结果不同,放入 HashMap 后无法被正常查询(定位不到原存储位置

    18110

    重构方法与实践笔记

    “重写”与“重构”之后,下面专注地讲一下重构 1.1 重构的概念和背景 EPC 破窗理论与懒惰:在没有刻意优化下,代码腐烂是必然的 80%在别人的代码上进行修改 1.2 重构的目的:使软件结构更加合理...- 难以维护 - 容易出现bug - 破窗效应 优秀函数的原则: 函数一般写10行 超过20行就考虑重构 第一条规则是短小 第二条规则还是短小 如何处理条件语句 - 函数提取:即按照逻辑拆分子函数...Android 刚开始开发时,使用MVC,V与C混杂在一起,造就了很多God Object。...成员变量,一般设置为private - 2. 集合:Collections.unmodifiableList - 3....散弹式修改,如每个AIDL调用,新增时非常复杂(使用查找表+注解依赖注入完成自动映射,不必每次新增) - 3.2.3.3 模块化 - 实现手法 - 通过封装得到模块 - 模块之间使用接口交互

    1.2K00

    【C++从小白到大牛】多态那些事儿(上)

    二、 多态的定义及实现 2.1多态的构成条件 多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。...class Student : public Person { public: virtual void BuyTicket() { cout << "买票-半价" << endl; } /*注意:在重写基类虚函数时...,派生类的虚函数在不加virtual关键字时,虽然也可以构成重写(因 为继承后基类的虚函数被继承下来了在派生类依旧保持虚函数属性),但是该种写法不是很规范,不建议这样使用*/ /*void BuyTicket...在子类和基类的析构函数都加上virtual构成重写,变为多态调用。那这里违反重写的规则,函数名都不相同,怎么能构成重写呢?...普通调用: 编译时,通过调用者类型确定函数地址。 面试题解析: 解析: 首先我们看到B继承A,那么B里面的func函数和A里面的func函数构不构成重写呢?

    21710

    Effective Java tips

    通常静态工厂更可取,因此避免在没有考虑静态工厂的情况下,直接选择使用或提供公共构造方法。...builder 模式客户端代码比使用伸缩构造方法(telescoping constructors)更容易读写,并且 builder 模式比 JavaBeans 更安全 使用私有构造方法或枚类实现 Singleton...谨慎的重写clone方法 通常,复制功能最好由构造方法或工厂提供。这个规则的一个明显的例外是数组,它最好用 clone 方法复制 公共类不应该暴露可变属性。...然而,有时需要包级私有或私有内部类来暴露属性,无论此类是否是可变的 最小化可变性,不可变类比可变类更易于设计,实现和使用。他们不容易出错,并且更安全。...继承是强大的,但它是有问题的,因为它违反封装。只有在子类和父类之间存在真正的子类型关系时才适用。即使如此,如果子类与父类不在同一个包中,并且父类不是为继承而设计的,继承可能会导致脆弱性。

    41720

    【C++】多态到底难在哪?虚函数表 + 动态绑定,一篇吃透底层逻辑!

    注意: 在重写基类虚函数时,派⽣类的虚函数在不加virtual关键字时,虽然也可以构成重写(因为继承后基类的虚函数被继承下来了在派⽣类依旧保持虚函数属性),但是该种写法不是很规范,不建议这样使⽤,不过在考试选择题中...2.3 重写析构函数的重要性 当我们在多态场景下,使用基类指针(如 Person*)指向一个派生类对象(如 new Student)时,我们期望在调用 delete 时,系统能根据指针实际指向的类型来调用正确的析构函数...当我们在多态场景下使用虚析构函数时,~Person() 析构函数会被调用两次,这是因为程序销毁了两个不同的对象。...2.4 析构函数重写成虚函数的原理 C++ 析构函数(Destructor)的重写机制是一个特殊的规则,它看似违反了虚函数重写中“函数名称必须相同”的必要条件,但实际上,这是语言标准为了保证多态的完整性而设立的例外...虚函数表的生成与存储 生成阶段:编译期(编译时已确定虚函数地址,直接生成虚表)。 存储位置:代码段(常量区)。 菱形继承与虚继承 菱形继承问题:数据冗余(同一基类成员在派生类中多次存储)、二义性。

    27210

    2022年了有哪些值得推荐的.NET ORM框架?

    EntityFramework.Exceptions - 当您的SQL查询违反SqlServer,MySql或PostgreSQL中的数据库约束时,请对EntityFrameworkCore使用类型化的异常处理...对象和数据库之间提供了一个简单、轻量、快速且类型安全的层。...在架构上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步,因为您使用 LINQ 表达式,而不是魔术字符串,同时在代码和数据库之间维护一个薄抽象层。...它极大地帮助开发人员在开发过程中进行上下文切换时简化体验。 开源软件——它是一个开源软件,并且永远是免费的。它旨在进一步改进 .NET 数据访问体验和解决方案,以及社区的集体思想。...用于安全执行 CRUD 操作和查询(使用参数)并以强类型方式检索这些查询结果的非常简单的方法。 与您的数据模型一起工作,而不会强迫您更改您的类。(包含一个小的反射驱动 ORM 层。)

    7.7K11

    常见的java面试的基础问题(二) | 附赠程序员面试必看的经典图书

    懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题,可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了,所以可以加双重判断来提高程序效率。...nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值 Scanner类的使用 可以获取从键盘的输入数据 构造方法:...子父类中的成员关系 成员变量:在子类方法中使用一个变量时,首先,在方法的局部变量中找这个变量,有则使用。否则,在本类中找成员变量,有则使用。否则,在父类中找成员变量,有则使用。否则,报错。...成员方法:用子类对象使用一个方法时。首先,在子类中找这个方法,有则使用。否则,在父类中找这个方法,有则使用。否则,报错。 重写和重载的区别? 重载:在同一类中。方法名相同,参数列表不同。...因为他继承父类的成员使用,使用前这些成员必须初始化,而他们是父类的成员,所以,必须通过父类进行初始化。所以,会先创建一个父类的对象。

    46130

    封装、继承与多态究极详解(面试必问)

    私以为实现是继承的特例,而其他四种关系都属于将类放在不同位置的灵活使用,且C中的结构体本身也具有这些特性,它并不是C++新创造出来的,但继承不一样,继承是新的需要提前约定的规则。...getBalance 方法:提供了一个公有的方法来获取余额,确保外部代码不能直接修改余额,但可以查询。 为什么使用封装?...public继承:子类继承父类的公有成员和保护成员,父类的公有方法和属性在子类中保持可访问。 protected继承:子类继承父类的公有成员和保护成员,但父类的公有方法和属性在子类中变为受保护。...在OOP中,多态指的是同一个操作作用于不同类型的对象时,可以有不同的表现形式。最常见的多态形式是方法重写(overriding),即子类可以重写(覆盖)父类的方法。...虚函数的定义和用法 虚函数是在父类中声明的成员函数,并使用 virtual 关键字修饰,表示这个函数可以在子类中被重写。 2.2.

    60110

    设计原则

    我们要遵循OCP原则,OCP背后的机制是抽象和多态,支持抽象和多态的关键机制是继承(比如C#是这样),那么是什么设计规则支配着这种继承用法?最佳的继承层次特征是什么?...3)完成的功能少于其基类的派生类通常是不能替换其基类的,因此违反LSP。 4)当派生类中抛出基类没有的异常时,违反LSP。...派生类的前置条件和后置条件规则为:在重新声明派生类中的例程时,只能使用相等或者更弱的前置条件来替换原始的前置条件,只能使用相等或者更强的后置条件来替换原始的后置条件。...违反原则的情形 高低层组件通过具体类来实现交互。 运用的方式方法 “倒置”不仅仅是依赖关系的倒置,也是接口所有权的倒置。当使用DIP原则时,往往客户拥有抽象接口,而他们的服务者则从这些抽象接口派生。...违反原则的情形 和除了上述关系最密切的对象之间通信。 运用的方式方法 1)限制类及其成员的访问权限。 2)引入门面模式和中介者模式。

    99171

    欢迎加入网络安全威胁信息共享计划

    、可申请获得资产暴露面发现与漏洞检测能力; 3、活动期间,您可获得高级威胁追溯系统使用权限(其中,企业内部安全从业人员每日最高可查询200次,企业外部安全服务人员每日最高可查询10次); 4、您可获取其他活动成员共享且经主办方复核的威胁信息...2、积分计算规则 积分仅计算给首次提交威胁信息的活动成员,且提交的威胁信息在活动期间被实际使用。...五、成员的义务与规则 1、所有活动成员均需同意并遵守《威胁信息共享计划活动成员规则》(详见附录)的全部规定,如活动成员存在任何违法违规或是违反《威胁信息共享计划活动成员规则》的行为,主办方有权立即取消活动成员的参与资格并进行清退...一、具体要求 1、活动成员需符合本活动的要求; 2、不得发表、提交、传播违法违规信息或不当信息,不得在活动群内发布病毒链接等任何不当内容; 3、不得提交、使用、公布或传播未经权利人同意公开的威胁信息;...4、不得提交或公布被攻击目标及具体的系统漏洞; 5、不得公布他人或产品、服务的具体的漏洞风险; 6、不得在活动群内公开恶意样本文件; 7、不得通过非法方式获取威胁信息或是公布来源违法的威胁信息; 8、不得擅自向除主办方外的人员公布威胁信息或是活动群内的任何信息

    3.6K20

    2022年了有哪些值得推荐的.NET ORM框架?

    EntityFramework.Exceptions - 当您的SQL查询违反SqlServer,MySql或PostgreSQL中的数据库约束时,请对EntityFrameworkCore使用类型化的异常处理...对象和数据库之间提供了一个简单、轻量、快速且类型安全的层。...在架构上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步,因为您使用 LINQ 表达式,而不是魔术字符串,同时在代码和数据库之间维护一个薄抽象层。...它极大地帮助开发人员在开发过程中进行上下文切换时简化体验。 开源软件——它是一个开源软件,并且永远是免费的。它旨在进一步改进 .NET 数据访问体验和解决方案,以及社区的集体思想。...用于安全执行 CRUD 操作和查询(使用参数)并以强类型方式检索这些查询结果的非常简单的方法。 与您的数据模型一起工作,而不会强迫您更改您的类。(包含一个小的反射驱动 ORM 层。)

    5.3K20

    java final 的一些总结

    总结了一下 final 的一些规则。 修饰"类"则类不能被继承,所以没有子类,final类中的方法默认是final的。可以提高效率。JDK中很多加final是这个原因的。...形参声明为 final,则方法内不能再改变其: 基础数据类型值不可被修改 传入对象不能再被 new 继承关系时,final 的方法将不会被子类重写。所以父类使用的仍是本类自己的方法。...final 类不可被继承。 C++ 也有final关键字,在C++11及以后的标准中引入了final,final关键字用于修饰类、成员函数和虚函数,表示它们是最终版本,不能被继承或重写。...代码示例 final修饰类: 当我们使用final关键字修饰一个类时,表示该类是不可继承的。这意味着其他类无法扩展这个被final修饰的类。这通常用于确保类的安全性和完整性。...final与线程安全: 在多线程环境下,使用final关键字可以提供一定的线程安全性。当一个对象被声明为final时,它的状态无法改变,从而避免了多线程并发修改的问题。

    23830
    领券