我正在使用
GeneratedBy.HiLo(string table, string column, string maxLo, string where);
表示主键。目前我正在寻找如何从表中加载maxLo而不是将其作为常量存储在代码中的可能性。 NextHi的值是从数据库表中加载的(好吧,它必须是整个概念根本不起作用)。但是我没有找到如何从表中加载maxLo的方法。从快速代码研究看来,这似乎是不可能的,但仍然可能我错过了一些东西。
我需要它的原因:我有业务应用程序和单独的配置应用程序,如果它在表中插入一些东西,需要使用相同的maxLo来保持id的一致性。当然,应用程序可以只运行。 两种可能的解决方法: - 我可以有一些共享的Dll,其中存储maxLo - 我可以在数据库中使用表格并在我自己的
上加载maxLo但是,如果没有任何解决方法,我仍然可以做我想要的事情。
FluentNHibernate版本:2.0.1.0
答案 0 :(得分:0)
我希望 答案,但我的是:不。我们必须将此值作为设置传递。原因在于表格hi-lo生成器是如何实现的。
检查TableHiLoGenerator code .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)并将这些值传递给配置......这真的很极端,但可能 答案