FluentNHibernate HiLo -可以从表中maxLo读取,而不需要在代码中硬连接

本文关键字:不需要 连接 代码 读取 maxLo HiLo FluentNHibernate | 更新日期: 2023-09-27 17:52:55

我使用

GeneratedBy.HiLo(string table, string column, string maxLo, string where);

为主键。目前,我正在寻找如何从表加载maxLo,而不是将其存储为代码中的常量的可能性。NextHi的值是从数据库表中加载的(好吧,它必须是,否则整个概念将无法工作)。但是我没有找到一种方法,如何从表中加载maxLo。从快速代码研究似乎是不可能的,但仍然可能我错过了一些东西。

我需要它的原因:我有业务应用程序和单独的配置应用程序,如果它插入一些东西到表中,需要使用相同的maxLo来保持id的一致性。当然,应用程序可以独占地运行。两种可能的解决方法:-我可以有一些共享Dll,其中maxLo将被存储-我可以在数据库中使用表,并在我自己的

上加载maxLo

但仍然可以做我想做的事情,没有任何变通。

FluentNHibernate版本:2.0.1.0

FluentNHibernate HiLo -可以从表中maxLo读取,而不需要在代码中硬连接

我希望有的答案,但我的是:不。我们必须传递这个值作为设置。原因在于表hi-lo生成器的实现方式。

检查TableHiLoGenerator代码。configure ()

/// <summary>
/// Configures the TableHiLoGenerator by reading the value of <c>table</c>, 
/// <c>column</c>, <c>max_lo</c>, and <c>schema</c> from the <c>parms</c> parameter.
/// </summary>
/// <param name="type">The <see cref="IType"/> the identifier should be.</param>
/// <param name="parms">An <see cref="IDictionary"/> of Param values that are keyed by parameter name.</param>
/// <param name="dialect">The <see cref="Dialect.Dialect"/> to help with Configuration.</param>
public override void Configure(IType type, IDictionary<string, string> parms, Dialect.Dialect dialect)
{
    base.Configure(type, parms, dialect);
    maxLo = PropertiesHelper.GetInt64(MaxLo, parms, Int16.MaxValue);
    lo = maxLo + 1; // so we "clock over" on the first invocation
    returnClass = type.ReturnedClass;
}

最有趣的部分是注释:

//Configures the TableHiLoGenerator by reading the value of <c>table</c>, 
// <c>column</c>, <c>max_lo</c>, and <c>schema</c> from the <c>parms</c> parameter.

参数 IDictionary<string, string> parms

在极端情况下,我们可以使用这个(以及它的流畅版本: GeneratedBy.HiLo(...) ) -从某处读取属性(例如:使用ADO.NET)并将这些值传递给配置…这确实很极端,但也可能是的答案
相关文章: