Дизайн NHibernate с частным членом

В моей базе данных я хочу сохранить настройки пользовательского интерфейса для одного из "представлений" в виде строки, разделенной точкой с запятой, то есть: "1;31;5;411;".

Я использую NNibernate для этого проекта, и это отображение и код для этого конкретного частного члена;

Код сущности C# для User.Settings

private string _linkConsole = "0";

[DataMember]
public LinkConsole LinkConsole
{
    get { return new LinkConsole(_linkConsole); }
    set { _linkConsole = value.GetSqlString(); }
}

XML-отображение:

<property name="LinkConsole" type="System.String" access="field.camelcase-underscore" not-null="true"/>

LinkConsole имеет множество открытых методов для настроек, специфичных для графического интерфейса пользователя, которые переключают значения определенных приватных членов.

Когда пришло время сохранить эти настройки в базе данных, .GetSqlString(); форматирует строку и записывает ее в закрытый член _linkConsole, который является закрытым членом, доступным для NHibernate и базы данных.

Проблема:

Когда я пытаюсь сделать что-то с GUI, то есть:

User.Settings.LinkConsole.SetRightPaneContent(50);

Это никогда не сохраняется в объекте LinkConsole, и я не могу понять, почему? Когда я устанавливаю точку останова, я получаю сообщение в Visual Studio, в котором говорится:

Ваш запрос на переход привел к автоматическому переходу свойства или оператора

Может быть, это является результатом проблемы, что я неправильно ее проектирую? Если это так, возможно ли достичь этого в сочетании с частным строковым членом?

Любая помощь будет принята с благодарностью! Спасибо!:-)

3 ответа

Решение

Это не совсем NHibernate вопрос. LinkConsole является ссылочным типом Если вы установите его член, он не будет вызывать set метод для свойства, из которого вы его получили, он будет устанавливать значение для экземпляра, который был возвращен из оригинала get, Если вы хотите, чтобы этот код работал, вам нужно получить новый LinkConsole экземпляр из User, вызовите методы, чтобы установить настройки, затем установите LinkConsole свойство пользователя для вашего настроенного экземпляра.

Рассматривали ли вы реализацию пользовательского IUserType для LinkConsole для использования в качестве типа NHibernate?

Описанный вами сценарий использования - именно то, для чего предназначен IUserType.

Возможно, проблема в том, как вы устанавливаете приватную переменную, которая записывается в базу данных. Не видя ваш код, я не могу быть уверен, но посмотрите на следующую статью, чтобы иметь возможность перейти к свойствам с Visual Studio:

http://msdn.microsoft.com/en-us/library/cc667388.aspx

Другие вопросы по тегам