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

NHibernate - 将同一实体映射到同一数据库中的不同表

您好,感谢您的提问。NHibernate是一个用于.NET平台的对象关系映射(ORM)框架,它允许开发人员将数据库表映射到.NET对象,并提供了一系列功能,如数据检索、持久化和查询。

在您的问题中,您提到了将同一实体映射到同一数据库中的不同表。这种情况下,您可以使用NHibernate的继承映射功能。继承映射允许您将多个实体类映射到同一张数据库表中,从而实现代码重用和更好的数据库设计。

以下是一个简单的示例,展示了如何使用NHibernate的继承映射功能:

代码语言:csharp
复制
public class Employee
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Email { get; set; }
}

public class FullTimeEmployee : Employee
{
    public virtual decimal Salary { get; set; }
}

public class PartTimeEmployee : Employee
{
    public virtual decimal HourlyRate { get; set; }
}

在这个示例中,Employee是一个基类,FullTimeEmployeePartTimeEmployee是从Employee派生的子类。您可以使用NHibernate的继承映射功能将这些实体类映射到同一张数据库表中,如下所示:

代码语言:csharp
复制
public class EmployeeMap : ClassMap<Employee>
{
    public EmployeeMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.Email);
        DiscriminateSubClassesOnColumn("employee_type");
    }
}

public class FullTimeEmployeeMap : SubclassMap<FullTimeEmployee>
{
    public FullTimeEmployeeMap()
    {
        DiscriminatorValue("full_time");
        Map(x => x.Salary);
    }
}

public class PartTimeEmployeeMap : SubclassMap<PartTimeEmployee>
{
    public PartTimeEmployeeMap()
    {
        DiscriminatorValue("part_time");
        Map(x => x.HourlyRate);
    }
}

在这个示例中,EmployeeMap是基类的映射,FullTimeEmployeeMapPartTimeEmployeeMap是子类的映射。DiscriminateSubClassesOnColumn方法用于指定继承映射的列名,DiscriminatorValue方法用于指定子类的值。

使用NHibernate的继承映射功能,您可以将同一实体映射到同一数据库中的不同表,从而实现更好的数据库设计和代码重用。

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

相关·内容

NHibernate总结

NHibernate不仅仅管理.NET 类到数据库映射(包括.NET 数据类型到SQL 数据类型映射),还提供数据查询和获取数据方法,大幅度减少我们开发时人工使用SQL和ADO.NET处理数据时间...封装Nhibernate底层操作,People.cs为实体类,People.hbm.xml为映射文件(把数据库People映射到实体类People)。...,其中People实体字段要设置为virtual。每个文件详细代码在下面介绍 (2)     在NH.Data层引用Nhibernate相关DLL ?...首先,我们要从ISessionFactory获取个ISession(NHibernate工作单元)。ISessionFactory可以创建并打开新Session。...virtual,要不然会报错 (4)     下面我们开始为People实体类进行数据库映射配置People.hbm.xml NHibernate要知道怎样去加载和存储持久化类对象。

89040

NHibernate 代码映射实体

NHibernate 代码映射实体类 关于代码映射 NHibernate 3.2 自带了代码映射机制, 作为 xml 映射之外种映射方式, 由于推出时间比较晚, 所以资料相对比较少, 而且与社区版...下面就通过个实例来说明怎么使用 NHibernate 自带代码映射。 实体关系 要映射类关系图如下: ?...public ProductMapping() { // 此处添加映射代码 } } 映射到数据 使用 Table 函数将类映射到制定数据: Table("product")...也可以向 xml 映射那样, 将映射导出到数据库, 创建对应数据以及关系: var schemaExport = new SchemaExport(config); schemaExport.SetDelimiter...Attribute Mapping 相比, 对原来 POCO 实体类没有污染 (Attribute) ; NHibernate 自带, 可以说是等公民, 而 Fluent Mapping 是第三方维护

86710

怎么把12个不同df数据全部放到同一同一个sheet且数据间隔2行空格?(下篇)

有12个不同df数据怎么把12个df数据全部放到同一同一个sheet 每个df数据之间隔2行空格。 而且这12个df表格不样 完全不12个数据 为了方便看 才放在。...这篇文章,我们继续沿着上篇文章,起来看看。@隔壁山楂 大佬 请问下 这个情况怎么调呀? 部分df数据可能涉及二三十行 然后我把数字调高还是会出现数据叠在情况?...二、实现过程 这里【隔壁山楂】给了个指导:前面写好没有删,你用是追加写入之前已经写好表格,你说下你想法。...后来还给了个指导:那你要先获取已存在可见行数,这个作为当前需要写入表格起始行。 后面这个问题就简单些了,可以直接复制到.py文件。...当然了,还有个更好方法,如下图所示: 顺利地解决了粉丝问题。希望大家后面再遇到类似的问题,可以从这篇文章得到启发。 三、总结 大家好,我是皮皮。

11310

NHibernate学习笔记之,Hello world!

NHibernate个面向.NET环境对象/关系数据库映射框架,主要应用在数据持久层,和其它ORM框架样用来把对象模型表示对象映射到基于SQL关系模型数据结构中去。...开始做个简单增删改查示例,如图1示例:  图1 1、创建数据库,这里假设使用NibernateDemo数据库,Users包括(id,name,pwd)字段,id是主键自动增长,name与pwd...文件夹对应数据库配置文件,这里使用MSSQL,所以复制“MSSQL.cfg.xml”,并对NHibernate配置信息适当修改 。...3、编写实体类(POCO,Plain Old CLR Objects),映射文件包含POCO类映射到个或者多个数据库元数据信息。User.cs文件如下所示。...、定义NHibernateHelper帮助类,Isession是NHibernate工作单元,它是个持久化管理器,我们通过ISession来从数据库存取数据。

57420

Nhibernate入门与demo

学习和使用Nhibernate已经很久了,直想写点东西和大家起学习使用Nhibernate。博客园里也有很多大牛写了很多关于Nhibernate入门文章。...先看张经典图:      ORM:对象关系映射(O/R Mapping,Object Relational Mapping)表示种技术,用来把对象模型表示对象映射到基于SQL 关系模型数据结构中去...通俗讲,就是我们操作实体类,然后让ORM框架自动映射到数据库。      而Nhibernate就是:.Net环境下实现ORM技术个框架!     ...先看项目整体图,作为初学demo 没有层次,没有优化,只是作为入门个简单介绍!      第步:设计数据库。建立个User。...然后对应数据库名。设置延迟加载为false。具体可以参考Nhibernate官方文档。 3、定要将这个文件属性:生成操作设置为嵌入资源!

31430

Nhibernate_nhibernate与ef区别

这里是我们要做: 1. 在数据库创建把.Net类持久化对应. 2. 创建需要被持久化.Net类. 3....步骤1:创建数据库 我们正在做个非常简单NH示例.在这个例子里面,我们实现个基本用户管理子系统.我们将会使用个user(sql server 2000): use NHibernate...:第个tag是class,这里我们把类型名(类名和Assembly名)映射到数据库user(这里和hibernate有些不同,我们必须告诉NH这个类从哪儿来.这个差异是由.Net和Java Reflect...机制不同引起-zyyang).这种情况下,我们是从Assembly NHibernate.Demo.QuickStart载入NHibernate.Demo.QuickStart.User类..NH...让我们返回到"id" tag,你可能会猜想这个tag和映射到Primary Key有关.正确.ID tag格式和Property tag相似.我们从Property(name)映射到目标数据库字段

54930

Nhibernate_juan benet

数据库创建把.Net类持久化对应. 2. 创建需要被持久化.Net类. 3. 创建映射文件,以告诉NH怎样持久化这些类属性. 4....步骤1:创建数据库 我们正在做个非常简单NH示例.在这个例子里面,我们实现个基本用户管理子系统.我们将会使用个user(sql server 2000): use NHibernate...:第个tag是class,这里我们把类型名(类名和Assembly名)映射到数据库user(这里和hibernate有些不同,我们必须告诉NH这个类从哪儿来.这个差异是由.Net和Java Reflect...机制不同引起-zyyang).这种情况下,我们是从Assembly NHibernate.Demo.QuickStart载入NHibernate.Demo.QuickStart.User类..NH...让我们返回到”id” tag,你可能会猜想这个tag和映射到Primary Key有关.正确.ID tag格式和Property tag相似.我们从Property(name)映射到目标数据库字段

35450

NHibernate详解

4.构建个让NHibernate知道如何连接数据库配置文件 5.使用NHibernateAPI 第步:写构建SQL 这里我们将使用个非常简单例子...假设你正在为你网站开发个基本用户管理子系统。我们将使用如下张User(假定你已经设置好数据库—在例子里我称它为NHibernate)。...第三步:写映射文件 现在我们有数据和需要去映射它.Net类。我们需要种方式去让NHibernate知道如何从个映射到个。这个任务依赖于映射文件来完成。...第个有趣标签是class。这里我们将映射类型名称(类名,装配件)到我们数据库User,这里和Hibernate有点点不同。你将不得不告诉NHibernate从何处提取对象。...你数据库里有张User。 现在可以在你代码恰当简洁使用NHibernate。简化版本如下 1. 创建个Configuration对象 2.

52330

NHibernate介绍「建议收藏」

创建NHibernate映射文件 Nhibernate使用XML映射文件来映射POCO到数据库对象。虽然在很多案例这可能是关系,但这并不是必定。...class元素表示到单个POCO映射。name表示上面的程序集和命名空间中类名,table属性告诉NHibernate数据库哪个或者视图将被映射。...id元素告诉NHibernate哪个数据库字段和对应对象作为个唯键来使用。在本例,我们使用Id这个字段。 generator元素告诉NHibernate怎样给新实体来创建唯ID。...property标签是见得最多标签。它简单地映射个到数据或者视图中对应字段映射。...,可以地写个Repository,专注负责相对应实体操作。

61320

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

ORM 是 Object Relational Mapping 缩写,译为“对象关系映射”,是种程序设计技术,用于实现面向对象编程语言里不同类型系统数据之间转换。...它解决了对象和关系型数据库之间数据交互问题,ORM作用是在关系型数据库和业务实体对象之间作个映射,这样我们在具体操作业务对象时候,就不需要再去和复杂SQL语句打交道,只需简单操作对象属性和方法...主要特点: 支持 CodeFirst 模式,即便使用 Access 数据库也支持数据迁移; 支持 DbFirst 模式,支持从数据库导入实体类,或使用实体类生成工具生成实体类; 支持 深入类型映射,比如...与ActiveRecord样,它支持对象和数据库之间密切关系。 与SubSonic样,它支持使用 T4 模板生成 poco 类(仅限 V5)。...目标是提供个方便、DRY、无配置、与 RDBMS 无关类型包装器,该包装器与 SQL 保持高度亲和性,公开直观 API,生成可预测 SQL 并干净地映射到断开连接和数据传输对象 (DTO)

5.7K11

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

IDriver -NHibernate.Driver.IDriver: 可选,驱动接口,用来封装隐藏不同ADO.NET 数据提供程序之间不同。例如:参数化等。...实例状态 在NHibernate个可持久化对象有三种不同状态,依据与持久化上下文之间关系不同,其中ISession就是个持久化上下文。...配置项介绍 在上篇文章,我们介绍了下如何设置NHibernate基本配置项,但是并未对配置项进行深入。...这节,将带领大家看NHibernate我们常用配置,因为配置项有很多,但大部分通常情况都遇不到使用它时候。...dialect 数据库方言,表示NHibernate连接数据库是什么,该用哪种格式解析关系映射到数据库SQL语句 default_schema 默认schema,用来设置连接字符串连接数据库默认

1.1K20

NHibernate实践与模式

NHibernate实践与模式 NHibernate款非常优秀O/R mapping开源框架,再还没有.net时候它已经存在于java环境。...下面我们先看下它框架 工作原理 将数据库结构映射成实体类(xml-mapping文件,实体类 ,class文件),支持对多,多对,多对多关系,默认生成对这些CURD操作,包括多表脊联操作...也没有比必要再去为对数据库操作写任何t-sql脚本,只需要专著业务层面的开发。从而大大减少sql层bug和开发时间,提高开发效率。...开发步骤 般我们是在先有数据库结构情况下,层往上写,先创建数据库,然后写数据库访问层代码(可以通过些通用ado.net类库完成如 Enterpriselibrary),接下来开始编写业务曾代码...然后再去创建数据库,和UI部分; 我还是按在有数据情况下如何用NHibernate作开发 1.用MyGeneration创建实体类和mapping文件选择NHibernate lujan99 1.06

79440

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

,Store是我们需要映射实体类,可能您会用为何不能像FluentMapping样Add()呢?...因为这里考虑到些契约问题,它Add参数为AutoPersistenceModel类型,接下来会说数据库结构 接下来,我们设计数据库结构,简单点: ?...,ORM最大好处就是我们可以随意变更我们数据库类型,不需要考虑其类型,这是我选择Nhibernate原因,EF虽然通过扩展能够支持其他数据库,但我相信用EF使用其他数据库的人很少吧。...用ExposeConfiguration方法委托NhibernateSchemaExport来创建数据库架构,相信很多NH玩家都会用吧。...刚我们测试报错,是因为EmployeeName是个UserName类,NhibernateComponent,我在FN之旅四(上)中有介绍到,默认情况下映射根据字段映射到数据库,所以上面的测试会报错

92160

.NET(C#)有哪些主流ORM框架,SqlSugar,Dapper,EF还是...

前言 在以前篇文章,为大家分享了《什么是ORM?为什么用ORM?浅析ORM使用及利弊》。...从构架上来说,linq2db是对比如:Dapper、PetaPoco这个微ORM步封装,但它不像Entity Framework那样笨重。它没有实现状态跟踪,需要自己处理实体状态更改等。...在开发过程参考了NBear与MySoft,吸取了他们些精华,加入新思想,同时参考EFLambda语法进行大量扩展。该组件已在数百个成熟项目中应用。...推荐等级:★★★☆☆ NHibernate NHibernate个面向.NET环境对象/关系数据库映射工具。...对象/关系数据库映射(object/relational mapping,ORM)这个术语表示种技术,用来把对象模型表示对象映射到基于SQL关系模型数据结构中去。

7.7K90

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

ORM 是 Object Relational Mapping 缩写,译为“对象关系映射”,是种程序设计技术,用于实现面向对象编程语言里不同类型系统数据之间转换。...它解决了对象和关系型数据库之间数据交互问题,ORM作用是在关系型数据库和业务实体对象之间作个映射,这样我们在具体操作业务对象时候,就不需要再去和复杂SQL语句打交道,只需简单操作对象属性和方法...主要特点: 支持 CodeFirst 模式,即便使用 Access 数据库也支持数据迁移; 支持 DbFirst 模式,支持从数据库导入实体类,或使用实体类生成工具生成实体类; 支持 深入类型映射...与ActiveRecord样,它支持对象和数据库之间密切关系。 与SubSonic样,它支持使用 T4 模板生成 poco 类(仅限 V5)。...目标是提供个方便、DRY、无配置、与 RDBMS 无关类型包装器,该包装器与 SQL 保持高度亲和性,公开直观 API,生成可预测 SQL 并干净地映射到断开连接和数据传输对象 (DTO)

3.8K20

DotNetNuke初试水之结合NHibernate开发和导入个Module

功能是对后台数据YourCompany_MyFirstModule 新增/删除/修改等操作 通过向导创建个webSite(只能使用VB.Net),并且通过向导初始化配置数据库 开发第个模块...注意:由于DNNweb框架代码使用VB.net开发,但是在同一个站点下可以使用不同开发语言,比如我比较擅长C#开发,所以新增模块我使用C#模板。...由于在同一个站点下使用了2语言所以需要修改Web.Config配置。 ?...,用于网站搜索和模块设置 ModuleNameInfo.cs定义实体对象,用于UI和Controller,Data相互传值 SqlDataProvider.cs具体数据库访问类(Sql数据库)...代码重构 生成Nhibernate实体类和Xml文件可以使用CodeSmith或是MyGeneration 应用Nhibernate封装好NHibernate.Repository类库(在

1.6K20
领券