1

Я пытаюсь получить fNH для отображения нестандартного типа, но у меня возникают трудности.Свободная конфигурация nHibernate для настраиваемого типа

Я хочу, чтобы fNH назначил его значение через интерфейс к настраиваемому типу. Мне также нужно nHibernate, чтобы сохранить экземпляр пользовательского типа в сущности. Он всегда будет создан при доступе к ресурсу, не перезаписывая экземпляр, просто установите завернутое значение.

Когда я пытаюсь ниже отображение, он бросает исключение «Не удалось найти поглотитель для свойства„Value“в классе«Entities.User»

Идеи?

FNH отображение: Пример

Map(x =>((IBypassSecurity<string>)x.SecuredPinNumber).Value,"[PinNumber]"); 

Домен:

public class User 
{ 
public SecureField<string> SecuredPinNumber {get;private set;} 
} 

public class SecureField<T> : IBypassSecurity<T> 
{ 
public T Value { get; set; } // would apply security rules, for 'normal' use 
T IBypassSecurity<T>.Value {get;set;} // gets/sets the value directy, no security. 
} 

// allows nHibernate to assign the value without any security checks 
public interface IBypassSecurity<T> 
{ 
T Value {get;set;} 
} 

ответ

2

Метод Map() является выражением строителем для извлечения имен свойств в виде строк. Поэтому ваше отображение сообщает NH, что вы хотите отобразить свойство «Value» в классе User, которого, конечно, не существует. Если вы хотите использовать свой собственный тип, прочитайте справочную документацию NH об этом и используйте метод CustomType() в вашем сопоставлении.

Вы также можете использовать защищенное свойство для PinNumber, которое обеспечивает прямой доступ.

public class User 
{ 
    protected virtual string PinNumber { get; set; } // mapped for direct access 
    public string SecuredPinNumber 
    { 
     get { /* get value with security checks */ } 
     set { /* set value with security checks */ } 
    } 
} 

Вы можете прочитать post о картографировании защищенных свойств с Fluent.

+0

благодарит за сообщение. Что касается использования CustomType, я рассмотрел пример и внешний вид примера, создав новый экземпляр типа SecureField и вернув его, чего я не хочу. Есть ли способ избежать этого? – jasper

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