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

在运行时添加nHibernate映射?

在运行时添加 NHibernate 映射是指在程序运行过程中动态地向 NHibernate 添加新的映射关系。这可以让您在不重新启动应用程序的情况下,更改映射关系。这在某些情况下可能非常有用,例如当您需要动态地从数据库中添加或删除实体时。

要在运行时添加 NHibernate 映射,您可以使用以下步骤:

  1. 创建一个新的映射类,该类继承自 ClassMapping 或其他适当的映射类型。
  2. 在映射类中定义实体的属性和关系。
  3. 使用 Configuration 对象的 AddMapping 方法将新的映射添加到 NHibernate 的配置中。
  4. 使用 Configuration 对象的 BuildSessionFactory 方法重新生成会话工厂。

以下是一个简单的示例,演示如何在运行时向 NHibernate 添加映射:

代码语言:csharp
复制
var configuration = new Configuration();
configuration.Configure();

// 创建一个新的映射类
var customerMapping = new ClassMapping<Customer>();
customerMapping.Table("Customers");
customerMapping.Id(x => x.Id, map => map.Column("Id"));
customerMapping.Property(x => x.Name, map => map.Column("Name"));

// 将新的映射添加到配置中
configuration.AddMapping(customerMapping);

// 重新生成会话工厂
var sessionFactory = configuration.BuildSessionFactory();

请注意,在运行时添加 NHibernate 映射可能会导致性能下降,因为 NHibernate 需要在运行时生成代理类和元数据。因此,在使用此功能时,请确保您已经权衡了其优缺点。

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

相关·内容

NHibernate 代码映射实体类

NHibernate 代码映射实体类 关于代码映射 NHibernate 3.2 自带了代码映射机制, 作为 xml 映射之外的一种映射方式, 由于推出的时间比较晚, 所以资料相对比较少, 而且与社区版的...下面就通过一个实例来说明怎么使用 NHibernate 自带的代码映射。 实体关系 要映射的类关系图如下: ?...public ProductMapping() { // 此处添加映射代码 } } 映射到数据表 使用 Table 函数将类映射到制定的数据表: Table("product")...rel.ManyToMany(map => { map.Class(typeof(Store)); map.Column("store_id"); }) ); 将映射添加到配置...通过下面的代码将上面的映射添加到配置: var config = new Configuration(); config.Configure("MySql.cfg.xml"); var mapper

90510
  • NHibernate 多对多映射的数据更新

    NHibernate 多对多映射的数据更新 最近在用 NHibernate 做多对多更新时突然发现 NHibernate 更新的策略很差, 对多对多关系的更新居然是先全部删除再插入全部数据, 感觉非常奇怪...当向用户添加或删除角色是, 发现更新的效率特别低, 代码如下: using (var session = sessionFactory.OpenSession()) { var user = session.Query...role); session.Update(user); session.Update(user); session.Flush(); } 上面的代码是将用户的第一个角色删除, 再添加一个新的角色...RoleId]) VALUES (@p0, @p1);@p0 = 1 [Type: Int32 (0)], @p1 = 10 [Type: Int32 (0)] 居然是先将属于该用户的全部角色删除, 再添加一份新的进来...for many-to-many associations 发现了解决方案, 将多对多的映射的 bag 改为用 set , 问题终于得到了解决, 改过后的映射如下: Set( m => m.Roles

    94910

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

    由于在项目中使用了NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。...,我们使用了Fluent NHibernate的Mapping方式代替XML配置。...使用Fluent NHibernate的最大好处是降低了出错的机会,因为Fluent Nhibernate的配置是使用C#来编写,可以智能感知,而且还能编译,不像原始的XML配置,写错了都不知道。...我们只需要定义好映射的规则,就可以不对每个表和类分别编写映射配置,而是按照规则进行自动的Mapping工作。这样在修改class或者DataTable时,只需要修改类和表即可,不需要再修改配置文件。...要做到Automapping,就一定要定义好严格的命名规范,然后按照规范编写Automapping规则,实现自动化的映射

    1.1K10

    Java如何在运行时识别类型信息?

    在Java中,并不是所有的类型信息都能在编译阶段明确,有一些类型信息需要在运行时才能确定,这种机制被称为RTTI,英文全称为Run-Time Type Identification,即运行时类型识别,有没有一点...运行时类型识别主要由Class类实现。 01 Class类 在Java中,我们常用“class”(首字母为小写的c)关键字来定义一个类,说这个类是对某一类对象的抽象。...这也就是说,Java能够在运行时自动识别类型的信息,它不会因为wanger的引用类型是Author而丢失wanger真正的类型信息(Writer)。Java是怎么做到这一点呢?...这也就是说,每个对象在运行时都会有对应的Class对象,这个Class对象包含了这个对象的类型信息。因此,我们能够通过Class对象知道某个对象“真正”的类型,并不会因为向上转型而丢失。...但写作的好处就在于此,在向读者解释“Java如何在运行时识别类型信息”的过程中,我的思路逐渐地清晰了起来——这真是一个自我提升的好办法!

    1.1K20

    如何在运行时保护容器化工作负载

    如何在运行时保护容器化工作负载 翻译自 How to Protect Containerized Workloads at Runtime 。...运行时安全性:预防优先 运行时安全性可能听起来像是一种超级特定的要求或方法,但 Bhatt 和其他专家指出,如果做得好,运行时安全的整体方法可以增强整个环境和组织的安全态势。...运行时安全性还应该理想地保护应用程序运行所需的环境、存储、网络和相关库。 运行时安全的 SaaS 解决方案 用更通俗的术语来说:运行时安全性意味着保护现代软件应用程序和环境中常见的所有东西。...以下是保护运行时要遵循的四个原则。 正确执行运行时安全性的 4 个关键 1.保护您的应用程序免受已知威胁的侵害。...这是预防优先思维模式的核心,侧重于引入工具持续检查的可靠威胁源 - 不仅在构建和部署期间,而且在运行时也是如此。

    12910

    自适应查询执行:在运行时提升Spark SQL执行性能

    那么就引来一个思考:我们如何能够在运行时获取更多的执行信息,然后根据这些信息来动态调整并选择一个更优的执行计划呢?...核心在于:通过在运行时对查询执行计划进行优化,允许Spark Planner在运行时执行可选的执行计划,这些计划将基于运行时统计数据进行优化,从而提升性能。...用户可以在开始时设置相对较多的shuffle分区数,AQE会在运行时将相邻的小分区合并为较大的分区。...为了解决这个问题,AQE现在根据最精确的连接关系大小在运行时重新规划join策略。...对于在运行时转换的broadcast hash join,我们可以进一步将常规的shuffle优化为本地化shuffle来减少网络流量。

    2.4K10

    在运行时与构建时如何保护云计算基础设施

    令人感兴趣的是,对于许多人来说,云计算安全性只与在运行时发生的错误配置和违规行为有关。 如果在构建时不关注流程和代码,就无法确定基础设施问题,这与企业设计和构建现代云计算基础设施的方式不符。...为了满足这些需求,大多数扫描程序都将它们的发现映射到行业基准。一旦控制被映射到基准部分,企业就可以使用扫描报告作为基准证据来满足大多数行业特定的需求和审核。...(6)重复的错误配置 对于利用基础设施代码框架来协调云计算资源的团队而言,只是在运行时修复错误配置会带来重复发生的风险。为了确保不会发生云计算配置错误,必须在源头进行补救。...例如,假设一个组织在运行时管理网络组件并在构建时计算资源,知道已加固的VPC或安全组将确保外人无法访问它,因此可以很容易地抑制暴露在全球互联网上面向EC2的标识。...运行时扫描可提供当前配置状态近乎实时的准确描述,但只有添加了构建时的扫描之后,团队才能响应并修复错误。

    1.2K10

    docker容器添加对外映射端口

    首次启动容器指定映射端口 在容器首次启动是,可通过-p参数(-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如: docker run -it -d --name [container-name...方式一:打包新镜像 如果正在运行的容器已经修改了很多配置,重新创建镜像,修改配置比较麻烦时,可在现有的容器基础上打包一个镜像。 然后在运行新镜像时进行端口映射的新增或修改。...container-name 将容器commit成为一个镜像: docker commit -m "New image with my changes" my-container my-new-image 提交时可以添加一些说明信息...如果容器正在运行,则提交操作将失败。此外,提交的容器必须是基于一个基础镜像构建的,否则提交操作也将失败。...停掉容器: docker stop d5104ec757b6 停掉docker服务: systemctl stop docker 修改hostconfig.json,添加端口绑定"443/tcp": [

    2.2K30

    NHibernate VS IbatisNet

    NHibernate对数据库结构提供了较为完整的封装,NHibernate的O/R Mapping实现了PO 和数据库表之间的映射,以及SQL 的自动生成和执行。...程序员往往只需定义好了PO 到数据库表的映射关系,即可通过NHibernate提供的方法完成持久层操作。...而IbatisNet的着力点,则在于PO 与SQL之间的映射关系。也就是说,IbatisNet并不会为程序员在运行期自动生成SQL 执行。...具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定PO。...使用IbatisNet提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的DotNet对象,这一层与通过NHibernate实现ORM 而言基本一致,而对于具体的数据操作,NHibernate会自动生成

    75870
    领券