Мое приложение имеет следующие классы:NHibernate - IUserType для изменения типа?
public class Widget {
public virtual int Id { get; set; }
public virtual WidgetType Type { get; set; }
public virtual string Parameters { get; set; }
}
public class WidgetType {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string ParametersAssembly { get; set; }
public virtual string ParametersClass { get; set; }
}
Теперь, если я хотел бы обновить параметры для конкретного виджета я бы сказал что-то вроде:
// Get the widget
var widget = GetWidget(1);
// Create an instance of the type parameters class
var parameters = Activator.CreateInstance(Assembly.LoadFrom(Server.MapPath("~/bin/"
+ widget.Type.ParametersAssembly + ".dll")).GetType(widget.Type.ParametersClass));
... Code here to update the parameters
widget.Parameters = new XmlSerializer(parameters.GetType()).Serialize(parameters);
я должен делать реверс когда Я хочу получить параметры. Вы можете себе представить, что это становится довольно утомительным. Мне было интересно, возможно ли это автоматически сделать это?
Я смотрел интерфейс IUserType. Я нашел article, который подобен. Однако моя проблема немного сложнее, так как мой тип изменяется в зависимости от типа виджета.
Буду признателен, если кто-нибудь сообщит мне, если это возможно, и, возможно, как это можно было бы достичь. Благодаря
Спасибо, я вижу, что это работает, но я не уверен, что полностью его понимаю. Является ли свойство Parameters параметром, который сопоставляется с базой данных? Если это так, то не должно быть строкой, и SerializedParameters вернут объект? – nfplee
'SerializedParameters' - это свойство, отображаемое на db. он содержит преобразование, для которого требуются другие свойства, поэтому его сложнее сделать в UserType, где другие свойства не могут быть инициализированы. «Параметры» не отображаются вообще – Firo
Все еще не имеет большой радости. Извините за боль, но уверены, что код сериализации и десериализации входит в свойство SerializedParameters, а не в свойство Parameters? Если бы вы могли привести пример получения и настройки свойства на основе моего сценария, который будет оценен. Спасибо – nfplee