1

Я используюFluentNHibernate HiLo - может быть maxLo прочитано из таблицы и не должно быть связано с кодом?

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

для первичного ключа. В настоящее время я ищу возможность загрузить maxLo из таблицы, а не хранить его как константу в коде. Значение для NextHi загружается из таблицы базы данных (нормально, в противном случае целая концепция не будет работать вообще). Но я не нашел способ загрузить maxLo из таблицы. Из быстрого изучения кода кажется, что это невозможно, но, возможно, мне что-то не хватает.

Причина, по которой мне это нужно: у меня есть деловое приложение и отдельное приложение конфигурации, которое должно использовать тот же maxLo для согласованности идентификаторов, если он что-то вставляет в таблицы. Конечно, приложение можно запускать исключительно. Два возможных пути решения проблемы: - я могу иметь некоторые общие Dll, где maxLo будет храниться - я могу использовать таблицу в базе данных и загрузить maxLo на собственном

Но все это было бы прекрасно, чтобы делать то, что я хочу, без каких-либо обходных путей ,

версия FluentNHibernate: 2.0.1.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) и передать такие значения в конфигурацию ... Это действительно экстремально, но может быть ответ

Смежные вопросы