首页
学习
活动
专区
工具
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要知道怎样去加载和存储持久化类对象。

92540

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 是第三方维护

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

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

    13810

    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来从数据库存取数据。

    60020

    Nhibernate入门与demo

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

    35530

    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)映射到目标数据库字段

    59330

    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)映射到目标数据库字段

    37750

    NHibernate详解

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

    68730

    NHibernate介绍「建议收藏」

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

    70520

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

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

    5.9K11

    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

    81240

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

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

    1.2K20

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

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

    97060

    .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关系模型数据结构中去。

    8.3K90

    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

    NET中小型企业项目开发框架系列(个)

    当时前端,我们开发了基于Net组结构sprint.NET+NHibernate+MVC+WCF+EasyUI等中小型企业级系统开发平台,如今把整个开发过程步步进展整理出来和大家分享,这个系列可能有点长...数据訪问层,页面层,数据模型层以及个公共类部分,每层我们在这个基础上抽象了相应接口,这样上层仅仅须要对下层,面向接口编程。同一时候有Spring.NET来管理层之间关系。...个抽象类实现增删改查同一时候又添加了子类自身扩展性....仅仅须要传入Name属性名称和值就可以; //这个Name是相应实体属性名称,非数据库字段名。...通过这个继承体系保证了我们在实现增删改查同一时候外放个接口保证扩展性.

    58010
    领券