NHibernate, пытается сохранить объект в виде строки в БД - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь добиться сериализации в некоторой форме объекта и сохранения его в БД, а затем воссоздать его.

Это структура: я использую https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/using-conversion-operatorsдля преобразования

 public class Order : AggregateRoot
 {
    private string _cityList;
    public virtual CityList CityList { get => (CityList)_cityList; }
 }

 public class CityList : ValueObject
 {
     private string _cities { get; }

     public CityList(string cities)
     {
         _cities = cities;
     }

     public static explicit operator CityList(string cityList)
     {
         return new CityList(cityList);
     }

     public static implicit operator string(CityList cityList)
     {
         return (string)cityList;
     }
  }

Это конфигурация

 mapping
        .Map(Reveal.Member<Order>("CityList"))
        .CustomType("string")
        .Column("CityList");

Это то, что я получаю

Произошло необработанное исключение при обработке запроса.InvalidCastException: невозможно привести объект типа CityList к типу System.String

NHibernate.Type.AbstractStringType.Set (DbCommand cmd, значение объекта, индекс int, сеанс ISessionImplementor) PropertyValueException: Ошибка при обезвоживании значения свойства для команды CityList.Stack.Adapters.Base.UnitOfWork.IUnitOfWork.CommitAsync (CancellationToken cancellationToken)

Почему я получаю это?и как это решить?

1 Ответ

0 голосов
/ 03 декабря 2018

Просто чтобы прояснить, это не точный ответ на ваш вопрос, но вы хотите дать альтернативный способ добиться того же.Мы создали Custom IUserType с именем JsonMappable Type.Этот тип сериализует и десериализует данные, сохраненные в БД в виде строки JSON, вам необходимо переопределить NullSafeGet и Set, а затем легко сопоставить их в файле сопоставления следующим образом:

        Property(p => p.UserAvailability, m =>
        {
            m.Type<JsonMappableType<UserAvailability>>();
        });

По этой ссылке рассказывается, как реализоватьiusertype

Как правильно реализовать IUserType?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...