流畅的 nHibernate、Hi-Lo 表,使用约定每行实体

2023-12-15

有没有办法通过约定指定用于 Hi-Lo 值的表,每个实体都有一个每行条目(同时仍然让 nHibernate 创建表结构)?我想复制 Phil Haydon 博客上的内容here,但无需手动管理表。就目前情况而言,只有当您已经在表中为“TableKey”创建了适当的条目时,将他的每表行代码迁移到自己的约定才有效。

或者,这可以通过 XML 映射实现吗?

如果一切都失败了,这是使用自定义生成器的唯一其他合适的选择,la这个帖子?


法比奥·毛洛谈到了这个在他的一篇按代码映射的帖子中。

通过代码示例进行映射:

mapper.BeforeMapClass += (mi, type, map) =>
    map.Id(idmap => idmap.Generator(Generators.HighLow,
        gmap => gmap.Params(new
        {
            table = "NextHighValues",
            column = "NextHigh",
            max_lo = 100,
            where = string.Format(
                "EntityName = '{0}'", type.Name.ToLowerInvariant())
        })));

对于 FluentNHibernate,您可以执行以下操作:

public class PrimaryKeyConvention : IIdConvention
{
    public void Apply(IIdentityInstance instance)
    {
        var type = instance.EntityType.Name;
        instance.Column(type + "Id");
        instance.GeneratedBy.HiLo(type, "NextHigh", "100", 
            x => x.AddParam("where", String.Format("EntityName = '{0}'", type));
    }
}

另外,Fabio 解释了如何使用IAuxiliaryDatabaseObject创建 Hi-Lo 脚本。

private static IAuxiliaryDatabaseObject CreateHighLowScript(
    IModelInspector inspector, IEnumerable<Type> entities)
{
    var script = new StringBuilder(3072);
    script.AppendLine("DELETE FROM NextHighValues;");
    script.AppendLine(
        "ALTER TABLE NextHighValues ADD EntityName VARCHAR(128) NOT NULL;");
    script.AppendLine(
        "CREATE NONCLUSTERED INDEX IdxNextHighValuesEntity ON NextHighValues " 
        + "(EntityName ASC);");
    script.AppendLine("GO");

    foreach (var entity in entities.Where(x => inspector.IsRootEntity(x)))
    {
        script.AppendLine(string.Format(
         "INSERT INTO [NextHighValues] (EntityName, NextHigh) VALUES ('{0}',1);",
         entity.Name.ToLowerInvariant()));
    }

    return new SimpleAuxiliaryDatabaseObject(
        script.ToString(), null, new HashedSet<string> {
           typeof(MsSql2005Dialect).FullName, typeof(MsSql2008Dialect).FullName 
        });
}

你可以像这样使用它:

configuration.AddAuxiliaryDatabaseObject(CreateHighLowScript(
    modelInspector, Assembly.GetExecutingAssembly().GetExportedTypes()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

流畅的 nHibernate、Hi-Lo 表,使用约定每行实体 的相关文章

  • NHibernate:如何从会话缓存中获取实体实例?

    我在工作单元开始时开始会话 并在工作单元结束时关闭 工作单元分布在多种方法中 在一种方法中 我使用加载实体Get方法 所以它位于会话缓存中 实体实例对于方法来说是本地的 因此 当方法范围结束时 实体实例将无法访问 但实体仍在会话缓存中 现在
  • NHibernate Criteria API 是否支持集合属性的投影?

    我需要使用条件 API 复制以下工作 HQL 查询 session CreateQuery select c from Parent p inner join p Children c where p Id 9 and c Id 33 Se
  • 是一对一的关系不好的策略

    用户始终拥有一个钱包 一个钱包始终属于一位用户 由于我想分离与钱夹相关的属性 我创建了 Wallet 对象并能够跟踪钱交易 我创建了 public Wallet Entity
  • 如何将 NHibernate 与 Lucene.Net 集成

    这变得很烦人 尝试将 Lucene Net 搜索与 NHibernate 集成 我只找到了 07 年的一些信息 有没有好看的最新这个的教程 从哪里开始 下载什么等 有没有办法在其他地方设置 NHibernate Search 元数据 而不是
  • 在 nhibernate 标准中使用内置的 sql“转换”函数

    我想利用 SQL Server 2008 中的 Convert 函数 以便可以在 DateTime 列上进行搜索 建议的 SQL 看起来像这样 SELECT list of fields FROM aTable WHERE CONVERT
  • 一次调用多个结果

    分页数据时 我不仅想返回10条结果 还想获取所有页面中的项目总数 如何在一次调用中获取页面的总计数和结果 我的分页方法是 公共IList GetByCategoryId intcategoryId intfirstResult intmax
  • Breeze + NHibernate 多对一关系,避免指定关系键

    以下多对一映射正在运行 取自 NorthBreeze public partial class UserRole public virtual long ID get set public virtual long UserId get s
  • NHibernate双向多对多映射列表/包

    我正在努力处理双向多对多映射 其中顺序在一侧很重要 但在另一侧则不重要 我有两个班级 项目和学生 一个项目有很多学生 顺序很重要 方案A John Sally Seth 方案B Alex Seth Amy John 一个学生有很多程序 但顺
  • 如何使用 NHibernate 和 Fluent NHibernate 存储未截断的 varchar(max) 字符串

    我的数据库模式有一个 varchar max 字符串 我读过另一本问题 https stackoverflow com questions 2343105 override for fluent nhibernate for long te
  • Fluent NHibernate 实体 HasMany 不同子类类型的集合

    所以基本的鉴别器映射一切都运行良好 我可以直接与实体 A 和 B 交互 没有任何问题 public class BaseType public class EntityA BaseType public class EntityB Base
  • 升级到 NHibernate 3.1:LINQ、Any 和映射组件集合的错误

    我们目前正在从 NHibernate 2 升级到 3 1 以下场景适用于旧的 LINQ 提供程序 但不适用于 NHibernate 3 1 中的新提供程序 以下是该场景的映射 public class FooDbMap ClassMap
  • NHibernate Session.Evict()

    我无法访问我面前的代码 所以我只是想知道是否有人可以帮助我解决 Session Evict 问题 假设我有一个包含地址子集合的 Person 对象 我从会话中填充 Person 对象并延迟加载 Addresses 集合 然后 我调用 Ses
  • 自动映射约定可以与映射覆盖一起使用吗?

    我的 id 有一个约定 它会自动映射名称为Id作为标识符 随着需求的充实 我需要调整域模型 所以很自然地我上网发现我需要创建一个继承自的类IAutoMappingOverride
  • NHibernate.Linq 类似

    如何使用 NHibernate Linq 生成此查询 WHERE this Name LIKE p0 p0 test Notice NO wild card 请注意 这不是 Linq To Sql 或实体框架 这就是 NHibernate
  • NHibernate 对单个属性的更新会更新 sql 中的所有属性

    我正在 NHibernate 中对单个属性执行标准更新 然而 在提交事务时 sql 更新似乎设置了我映射到表上的所有字段 即使它们没有更改 这肯定不是 Nhibernate 中的正常行为吧 难道我做错了什么 谢谢 using var ses
  • NHibernate:QueryOver<> 帮助

    我刚刚开始使用 NHibernate 在运行更复杂的查询时遇到了麻烦 我有带有附加标签列表的实体 用户将提供两个标签列表 包括和排除 我需要找到具有所有包含标签的所有实体 并排除在排除列表中具有任何标签的任何实体 下面是我的第一个努力 这显
  • Fluent NHibernate 中的 NHibernate 配置属性

    我正在考虑在我的项目中使用 Fluent NHibernate 但我还没有找到任何关于 FH 是否支持 NHibernate 设置 例如 show sql 和prepare sql 的文档 我可以在紧要关头没有 show sql 生活 但p
  • 使用无状态会话延迟查找字典值

    在我的应用程序中 我设置了一个三元字典映射 以便对于给定用户 我可以检索属于该用户的对象的每个实例的 设置 也就是说 我有类似的东西 public class User public virtual IDictionary
  • 如何使用 NHibernate 将实体分布在多个表上?

    我有预先存在的表 使用一种开放模式 我有一个项目表 各种实体被分类为项目 然后将属性存储在项目属性表中 单个实体类型可能具有存储在多个表中的字段 我们公开带有视图的实体 所以 大多数实体对应一个视图 然后当我们插入 更新时 我们必须系统地更
  • 一对一映射不适用于二级缓存

    我已经声明了 Hibernate 3 的以下映射 使用 FluentNHibernate public class ActivityMap ClassMap

随机推荐

  • 在 Spring 3 中为控制器实现 AOP

    如何使用带注释的控制器实现 AOP 我搜索并找到了之前关于该问题的两篇文章 但似乎无法找到有效的解决方案 发布解决方案1 发布解决方案2 这是我所拥有的 调度 Servlet
  • Angular2 中基于枚举进行选择

    我有这个枚举 我正在使用打字稿 export enum CountryCodeEnum France 1 Belgium 2 我想建立一个select in my form 对于每个option枚举整数值作为值 枚举文本作为标签 如下所示
  • jQuery 事件委托

    我需要一些有关回调的帮助 由于某种原因 它们的工作效果并不是很好 我正在用 jQuery 制作一个游戏 我有一个 div div 对于游戏中将出现的所有按钮 游戏将有两个执行操作的按钮 上面有一个问题 该问题由一个控制 h3 h3 我想知道
  • 如何使 opencart 多商店在多个 TLD 上共享同一个购物车?

    我有以下场景 已安装domain1 com store1 opencart 1 5 6 域名2 com 商店2 域名3 com store3 我设法在不同的域上安装所有 3 个商店 并且所有商店都使用相同的 opencart 安装 stor
  • Minitest:如何使用模拟进行存根并验证其参数

    这是一个关于模拟类方法的小例子module Email 该方法称为connect and send require minitest autorun module Email def self connect and send args n
  • C++ 和 C# 中的二进制序列化/反序列化

    我正在开发一个具有两个组件的分布式应用程序 一种是用标准 C 编写的 不是托管C 并在 Linux 平台上运行 另一个是用 C 编写的 两者都通过消息总线进行通信 我遇到的情况是 我需要将对象从 C 传递到 C 应用程序 为此我需要在 C
  • 如何使用 Pooled Spring bean 而不是 Singleton bean?

    出于效率原因 我有兴趣限制同时使用 Spring 应用程序上下文的 bean 的线程数量 我不希望无限我的处理线程数limited记忆 我已经发现here spring 文档 一种通过以 EJB 样式池化 bean 来实现此目的的方法 方法
  • 添加相同类型的自定义解析器时,默认参数解析器会发生什么情况?

    所以我想将最大可分页大小值限制为 10 示例值 我可以这样做 Configuration public class MvcConfiguration extends WebMvcConfigurerAdapter Override publ
  • 如何将 Selenium WebDriver 嵌入为 WPF 控件?

    有没有办法嵌入WebDriver驱动程序到 WPF 窗口 类似于 WPFWebBrowser控制 或者 有没有一种方法可以在WebBrowser控制自己 到目前为止 只能创建一个新的WebDriver窗口 与应用程序中的任何其他 WPF 窗
  • SQL Server 连接最新 2 个条目

    我知道帖子的标题很糟糕 但请听我说完 前几天工作中出现了这样的问题 虽然我找到了解决方法 但这个问题仍然困扰着我 假设 Stackoverflow 只有 3 个表 Users username Comments comment creati
  • 如何为现有 Azure WebApp 添加 Application Insights

    我在 Azure 中有 10 个 Web 应用程序 但我无法为它们配置 Application Insights 因为我还没有使用它们保存项目 当我在 VisualStudio 中创建新的 WebApp 时 可以为应用程序添加 Applic
  • Java:检测三击而不触发双击

    我有一个 JTable 我想在双击单元格时调用一个函数 并在三次单击单元格时调用另一个函数 当单元格被三次单击时 我不想调用双击功能 我现在拥有的是 mgrdAlarm 是 JTable mgrdAlarm addMouseListener
  • 多路 FunDeps 以及与重叠实例的一致性:(为什么)这有效?

    这是旧栗子的变体 我写它的时候以为它不会起作用 但它确实起作用了 还是它很狡猾 在 GHC 8 6 5 中 LANGUAGE MultiParamTypeClasses FlexibleInstances FlexibleContexts
  • 实体框架数据库种子不种子

    我对 EF 还很陌生 我正在尝试覆盖Seed我的自定义初始化程序中的方法 使用 MVC 4 问题是当 EF 创建数据库时 我没有发现任何初始记录插入到我的数据库中Admins桌子 这是我的代码 namespace FP Domain Con
  • Ionic 3 错误 没有 AppVersion 的提供程序

    我正在使用 Ionic 3 延迟加载 我收到此错误 但似乎找不到我的方法的错误 错误 没有 AppVersion 的提供者 I have 设置 module ts import NgModule from angular core impo
  • 子类上的重复生成器序列休眠

    我按照这篇文章来解决我最初的问题 在 Hibernate 中的子类上指定每个表的不同序列 但现在我得到一个例外 调用init方法失败 嵌套异常是 java lang IllegalArgumentException 重复的生成器名称 idg
  • 在设计 C# 类库时,什么时候应该选择继承而不是接口? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我有一个号码Processor类将执行两种截然不同的操作 但从通用代码中调用 控制反转 情况 我想知道在决定它们是否都应该继承时 我应该认识到 或为您的用户认识到 哪些设计考虑因素Base
  • 使用 sed 替换文本

    我在通过 sed 替换脚本中的修改日期时遇到问题 我得到的最后修改日期是这样的 olddate grep m1 Built script sh cut c 22 29 我通过以下方式获取当前日期 newdate date d m y 基本上
  • 如何在实体框架代码优先方法中使用表值函数?

    我正在使用实体框架开发一个项目 现在我遇到了一种情况 我需要使用表值函数 它返回包含 2 列的表 因此我搜索了很多 我开始知道我们在数据库优先方法中使用表值函数虽然我首先需要在代码中使用它 情况是这样的 我有一个有两列的表格 Table1
  • 流畅的 nHibernate、Hi-Lo 表,使用约定每行实体

    有没有办法通过约定指定用于 Hi Lo 值的表 每个实体都有一个每行条目 同时仍然让 nHibernate 创建表结构 我想复制 Phil Haydon 博客上的内容here 但无需手动管理表 就目前情况而言 只有当您已经在表中为 Tabl