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

我可以使用nhibernate来判断属性是否脏了吗?

当然可以。NHibernate 是一个 .NET 的对象关系映射(ORM)框架,它允许您通过简单的映射关系来管理数据库。在 NHibernate 中,您可以使用 ISession.IsDirty() 方法来检查实体对象的属性是否已更改。

以下是一个简单的示例,说明如何使用 NHibernate 检查实体对象的属性是否已更改:

代码语言:csharp
复制
using NHibernate;
using NHibernate.Criterion;
using System;
using System.Collections.Generic;

public class Person
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual int Age { get; set; }
}

public class Program
{
    public static void Main(string[] args)
    {
        ISession session = NHibernateHelper.OpenSession();

        // 创建一个新的 Person 对象
        Person person = new Person
        {
            Name = "John Doe",
            Age = 30
        };

        // 将新的 Person 对象保存到数据库中
        session.Save(person);

        // 获取刚刚保存的 Person 对象
        Person savedPerson = session.Get<Person>(person.Id);

        // 修改 Person 对象的属性
        savedPerson.Name = "Jane Doe";
        savedPerson.Age = 25;

        // 检查 Person 对象的属性是否已更改
        bool isDirty = session.IsDirty(savedPerson);

        if (isDirty)
        {
            Console.WriteLine("Person 对象的属性已更改");
        }
        else
        {
            Console.WriteLine("Person 对象的属性未更改");
        }

        session.Close();
    }
}

在上面的示例中,我们首先创建了一个新的 Person 对象,并将其保存到数据库中。然后,我们获取刚刚保存的 Person 对象,并修改其属性。最后,我们使用 ISession.IsDirty() 方法检查 Person 对象的属性是否已更改。

需要注意的是,ISession.IsDirty() 方法只能检查实体对象的属性是否已更改,而不能检查实体对象是否已被删除或添加到数据库中。如果您需要检查实体对象是否已被删除或添加到数据库中,可以使用 ISession.IsPersistent() 方法来检查实体对象是否已被持久化。

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

相关·内容

你还在使用if判断是否实体类或者某个属性为空吗?教你使用Assert.notNull()

前言 最近在阅读公司项目的代码时,看到了一个工具类:org.springframework.util下的方法很多很好用,今天带大家一起了解一下这个工具类的**Assert.notNull()**方法,告别...if判断实体类是否为null和某个属性是否为null。...,数据库返回为空 User user = null; Assert.notNull(user,"实体类user为空"); //这里我们演示实体类的某个属性判断是否为空...(object == null) { throw new IllegalArgumentException(message); } } 简单的做了一个判断...,如果为空就抛出IllegalArgumentException(非法参数异常) 五、总结 优点: 告别了if判断为空 缺点: 场景比较单一,基本使用在查询数据库后的实体类判断 Q.E.D.

1K20

C#——Nhibernate探索

C#—Nhibernate探索 本篇文章,让我们一起探索Nhibernate。 首先我们去搜索Nhibernate下载地址,如下链接所示。 该版本可能是最新版,下载的4.0.4.GA。...虽然感觉,这俩文件好像不是这么用的,但由于可以判断它们并不影响程序运行,所以,先且不管他们,等程序运行起来后,再删除他们试试。 再之后,上网调查了下Nhibernate的应用。...,是否可以正常运行。...最后,nhibernate-configuration-2.2这句话想了很久要不要改成4.0。 结果是没改,测试一切正常。可以顺利使用。  ...为什么说是探索之旅呢,因为,也是首次配置Nhibernate平常更多的是使用Entity Framework。 文中使用了一些推断,猜测的词语。那是因为,真的是在推断的。

48230

Fluent NHibernate之旅

Fluent NHibernate,有了它,我们可以完全脱离配置文件,不过博客园中介绍Fluent NHibernate的文章非常少,而且官方文档也还没有完全,所以对于我来说也就一点一点摸索起来,这也激起了写这个笔记的欲望...在NHibernate中,ISession是操作数据的核心,我们需要通过SessionFactory建造ISession进行数据的交互。...四、灵活的Fluent      那我们Fluent就没有办法灵活了吗?...当然不,Fluent的开发者不仅帮你保留了原有的方式,还可以混合你的配置文件,最有意思的时,你还可以使用学习NHibernate,甚至可以使用开发你自己的自动代码生成工具,因为也刚学,先介绍一些简单的...使用NHibernate的配置      也就是你可以按照原先的方式进行配置,而读取呢使用Fluent读取,然后创建SessionFactory,或许你感觉这不是多余了嘛,那是因为还没有讲到Mapping

1K60

再论IBatisNet + Castle进行项目的开发

Com+很重,不需要分布式的中小项目慎用,NHibernate虽好,NHibernate的2005-9-20发布了最新版本1.0-rc1,缺少高水平的OO设计师,项目组程序员水平参次不齐 ,应用Castle...+ IBatisnet大家不会再把精力浪费到数据访问,事务处理,主键生成等地方了,可以集中精力进行业务组件的编写。...iBatisNet中的DaoManager作的两大工作:dao事务管理,dao接口与实现的解藕,Castle的事务处理使用了是Castle的扩展单元,可以配置到方法级,用法类似于Com+,需要对该类设置声明性事务属性以确定其事务性行为...不过具体用哪一种(MEMORY  LUR  FIFO  OSCACHE)容量设多大,都得根据项目的实际情况定,通常首选LUR。正确设定缓存的Flush语句,杜绝缓存中数据产生的可能。...缓存使用前提是,系统中对表的读写一定要都通过ibatisNet进行,也就是封闭的。        动态SQL的确是个强点。熟悉后感觉很不错。

48990

C# 数据操作系列 - 12 NHibernate的增删改查

前言 上一篇《C# 数据操作系列 - 11 NHibernate 配置和结构介绍》 介绍了Nhibernate里的配置内容。这一篇将带领大家了解一下如何使用NHIbernate。...之前提到NHibernate继承了Hibernate的一些传统:使用XML文件进行配置,这一点也是备受争议。...(7) /> schema: 数据库schema的名称 default-cascade:可选项,默认是none,一种默认的级联风格 auto-import:明确是否可以在查询中使用非限定类名...,默认情况从Property 中读取 default-lazy:可选的,默认是true,是否启动延迟加载 1.2 class的配置 一般情况下,class节点只需要指定name和table就可以了。...总结 嗯,NHibernate基础使用篇到这里可以暂告一段落了。后续的内容有机会再深挖,当然并不代表EF Core就没有了。嗯嗯,没毛病。下一篇就让先替大伙看看SugarSQL是什么情况吧。

1.1K20

搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (三)实现数据库接口层和业务逻辑层

用到的所有dll,稍后将提供下载。如果你急需 可以通过邮件向我索取:malun666@126.com 另外要添加Model项目的引用。因为我们也用到了实体类。...; using Spring.Data.NHibernate.Generic; using SpringHiberate.dao.model; using NHibernate; using MyWeb.WebTemp.IDao...具体看你的应用,可以根据你的需要添加。 第三步:设计接口IBLL层【业务逻辑接口层】。在MyWeb.WebTemp.IBLL中添加类文件:IUserService 注:添加Model项目的引用。...namespace MyWeb.WebTemp.BLL { public class UserServiceImpl : IUserService { #region 属性...return UserDao.GetUserById(id); } #endregion } } 当前项目的目录结构如图所示: 你的业务逻辑层和数据库接口层实现了吗

38820

NHibernate详解

我们将使用如下的一张User表(假定你已经设置好一个数据库—在的例子里称它为NHibernate)。...是public,但这个对NHibernate不是必要的.它可以使用public, protected, internal或者甚至是用private持久化数据。...让我们先跳过id标签,讨论property标签。简要看一下,你将发现NHibernate所要做的工作。name属性的值正是我们.Net 类的属性,column属性值将是我们数据库里的字段。...那里有一堆属性你需要调整确定如何让NHibernate来访问数据库。再次说明,你可以在文档里获取更多信息。 NHibernate使用log4net记录内部发生的一切。...现在可以在你的代码中恰当简洁的使用NHibernate。简化的版本如下 1. 创建一个Configuration对象 2.

61230

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

前言 今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用。这一篇,继续探索NHibernate背后的秘密。嗯,就是这样。 1....只要ISession关闭了,这些对象就可以被分离出来然后可以在应用层的任意地方使用。...这一节,将带领大家看一下NHibernate中我们常用的配置,因为配置项有很多,但一大部分通常情况都遇不到使用它的时候。...max_fetch_depth 最大递归深度,表示一次查询中直接加载的导航属性深度。默认是不直接加载导航属性,基于延迟加载的逻辑,由实际使用时才从数据库中加载数据。...show_sql 是否在控制台中打印转换的SQL语句,一般在调试的过程中会设置为true,用来确认生成的SQL是否正确等。

1.2K20

搭建你的Spring.Net+Nhibernate+Asp.Net Mvc 框架 (一)搭建你的环境

使用这套框架不是很长时间。但也基本应用了几个项目中了。在此和大家分享一下是怎样一步一步搭建此框架的。并为初学者提供一个简单的示范。欢迎共同讨论技术问题。【本人纯属菜鸟!不足之处多谅解!】...第一步:       首先要看一下项目中三层与mvc以及Spring.Net,Nhibernate处在的哪一层。看下面一幅图: 先做为一个大体的思路和了解。...本人很喜欢。可以用IReaper下载观看。...第三步:       准备:Spring.Net,Nhibernate的开发环境,使用的版本比较老,但是一直使用着比较稳定,功能也基本满足开发需要,在此就不多说了,在http://www.springframework.cn...先写到这,你的环境准备好了吗? 文章还在继续......

38730

Fluent NHibernate之旅二--Entity Mapping

本节内容: 简单实体映射 使用自定义类型映射实体属性 NHibernate的实体映射(Entity Mapping)做的非常好,虽然不是完美,但一些我们经常使用的,基本上已经都支持了,而且配置也相对比较简单...对于我这种新手来说,Fluent更适合,因为可以用它进行学习NHibernate。 映射做好了,接下来我们在NHibernate中把映射加到配置中。...二、使用自定义类型映射实体属性 NHibernate支持我们用自定义的类型映射属性,但因为是初学,真的不会,当然在网上找到了相关的资料,在此也不多说,就说说Fluent的方式吧,在映射自定义属性的时候...为了接下来的方便,把Fluent的Mapping都生成到我传统方式的Mapping目录中,加入到项目,设置成嵌入的资源,一切都为了以后的教程,换句话说以后的教程中,一般都会使用Fluent进行映射...不过这不影响需要完成这个系列的愿望,因为真的遇到了太多难以解决的问题,确实在解决中学到了很多,很希望能把这一切与大家一起分享,至于好与坏,待大家评价吧。 PS:终于可以上网了,憋了好久啊,哈哈

1K90

Nhibernate_nhibernate与ef区别

大家好,是架构君,一个会写代码吟诗的架构师。今天说一说Nhibernate_nhibernate与ef区别,希望能够帮助大家进步!!! 什么是NHibernate?...EmailAddress varchar(40) default NULL, LastLogon datetime default NULL, PRIMARY KEY (LogonID) ) go 使用的是...步骤2:创建.Net类: 当我们这样一堆的用户的时候,我们需要某种对象保存.NH是通过reflection对象的属性工作的,所以我们给需要持久化的对象添加属性.一个对应于上面数据库结构的类可以写成这个样子...public-NH并不要求一定要这样做.你可以使用public,protected,internal或者干脆private标记你的属性....驱动,连接到本地的nhibernate数据库,并且使用提供的用户和密码.还会有其他的配置项,你可以参看文档.

57230

NHibernate介绍「建议收藏」

大家好,又见面了,是你们的朋友全栈君。 现代化大型项目通常使用独立的数据库存储数据,其中以采用关系型数据库居多。...创建数据模型 NHibernate允许直接使用Plain Old CLR Objects (POCOs),而不用通过存储过程直接和数据库交互。使用POCOs的一个优势在于不用绑定特定的持久化层。...相比较而言,有些ORM解决方案需要特殊属性,或者是基于模型对象,这些对象又是从特定的基类中继承而来的。 在NHibernate中不用特殊的修饰就可以让对象和持久化层交互。...创建NHibernate映射文件 Nhibernate使用XML映射文件映射POCO到数据库对象。虽然在很多案例中这可能是一对一关系,但这并不是必定的。...name表示上面的程序集和命名空间中的类名,table属性告诉NHibernate数据库中的哪个表或者视图将被映射。 id元素告诉NHibernate哪个数据库的字段和对应的对象作为一个唯一键来使用

64120

Fluent NHibernate之旅(三)-- 继承

从这一篇开始,我们将使用Fluent NHibernate RC 1.0 版进行演示,先前的代码,我会另外进行说明 继承 在OOP中,继承作为OO中重要的特性,如果NHibernate没有对它的支持,...那怎么通过数据库设计完成继承呢?常见的方法有三种,今天我们就一一进行叙述。继承的概念就不说了,如果你连继承还不知道的话,可以好好学起,从头学起,呵呵。...产品的相同属性可以参考上一篇。...因为需要标识符,所以我们必须添加一个标识符,这里使用枚举类型表示,代码改变成如下: public enum ProductType { Mobile, Book } public...,而且现在的更新也非常快,后面几张可能说下几种不常见的映射和会遇到的些麻烦,不过感觉园子里使用NHibernate的人不太多,关注度不多,不过不影响继续写下去的决心,这次也很偶然接触了FNT,确实有好多好的地方可以借鉴一下

66680

Nhibernate_juan benet

大家好,又见面了,是你们的朋友全栈君。 什么是NHibernate? NHibernate是一个基于.Net,用于关系数据库的对象持久化类库.它是著名的Hibernate的.Net版本....EmailAddress varchar(40) default NULL, LastLogon datetime default NULL, PRIMARY KEY (LogonID) ) go 使用的是...步骤2:创建.Net类: 当我们这样一堆的用户的时候,我们需要某种对象保存.NH是通过reflection对象的属性工作的,所以我们给需要持久化的对象添加属性.一个对应于上面数据库结构的类可以写成这个样子...public-NH并不要求一定要这样做.你可以使用public,protected,internal或者干脆private标记你的属性....驱动,连接到本地的nhibernate数据库,并且使用提供的用户和密码.还会有其他的配置项,你可以参看文档.

36350

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

前言: 最近有很多同学问我.NET方面有哪些好用的ORM框架,觉得这方面的介绍网上应该会介绍的比较全面文章,于是想搜一篇全面的介绍文章发给他们结果发现网上说来说去基本上就是那几个,于是就有了这篇文章...这个库的目标是通过不需要任何属性或基类继承保持你的 POCO 纯净。 Dapper-FluentMap - Dapper的扩展。 Dommel - Dapper的CRUD操作。...SmartSql 借鉴了 MyBatis 的思想,使用 XML 管理 SQL ,并且提供了若干个筛选器标签消除代码层面的各种 if/else 的判断分支。...SmartSql将管理你的 SQL ,并且通过筛选标签维护本来你在代码层面的各种条件判断,使你的代码更加优美。 主要特点:简洁、高效、高性能、扩展性、监控、渐进式开发!...它可以帮助您在开发过程中简化何时使用 BASIC 和 ADVANCE 操作的切换。 主要特点: 易于使用- 这些操作都作为您的 IDbConnection 对象的扩展方法实现。

5.8K11

NHibernate的单表继承模式下通过父类Repository查询子类

NHibernate中经常遇到继承与关系数据库的ORMapping的问题,之前的一篇博客(http://www.cnblogs.com/studyzy/archive/2011/08/16/2140675...使用单表继承可以不用Join多个表查询效率高,而且在Domain Model的属性提示到父类或者下降到子类时,数据库模型不用更改。...在NHibernate中经常会遇到通过父类的Repository查询子类的情况,比如现在有一个抽象的Employee对象,下面有OfficeUser和Teacher两个具体的对象,这两个对象都有其特有的属性...我们可以将OfficeUser和Teacher都保存到Employee表中,然后建立了一个EmployeeRepository,使用Employee作为Query的入口,那么如果要查询Employee表中所有的...以上是以最简单了例子说明了如果通过父类查询具体的子类的方法,实际项目中肯定比这个查询要复杂,但是只要记住了这三种查询的要点,结合其他条件就可以写出NHibernate能够理解的查询。

33020

#1在构造函数内调用虚方法 | TW洞见

谜题 在C#中,用virtual关键字修饰的方法(属性、事件)称为虚方法(属性、事件),表示该方法可以由派生类重写(override)。...虚方法是.NET中的重要概念,可以说在某种程度上,虚方法使得多态成为可能。 然而虚方法的使用却存在着很大学问,如果滥用的话势必对程序产生很大的负面影响。...明白了吗?我们简单总结一下。...比如如果项目中使用NHibernate,框架本身要求ORM实体类中,所有与数据库列具有对应关系的属性都必须为虚属性。...而有些时候,为了业务需要,我们不得不在实体类的构造函数中对这些属性进行某些操作(比如初始化)。 认为这么做是技术选型所致的必然结果,是完全可以接受的。

1.2K110
领券