У меня есть огромная проблема! Я получаю исключение при сопоставлении абстрактного класса с несколькими союзными подклассами в nhibernate. Когда я использую только один союз-подкласс, я не получаю никаких ошибок, и все работает нормально. При использовании более подклассов эта ошибка встречается,:Объект не соответствует целевому типу .. Исключено происхождение getter
[TargetException:. Объект не соответствует целевой тип] System.Reflection.RuntimeMethodInfo.CheckConsistency (целевой объект) +10909543 System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck (Object obj, BindingFlags invokeAttr, Binder binder, Object [] parameters, CultureInfo culture) +115 System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, связующее связующее, Object [], культура CultureInfo) +54 System.Reflection .RuntimePropertyInfo.GetValue (Object obj, BindingFlags invokeAttr, Binder binder, Object [] index, CultureInfo culture) +61 System.Reflection.RuntimePropertyIn fo.GetValue (объект Object, Object [] индекс) +19 NHibernate.Properties.BasicGetter.Get (целевой объект) +99
[PropertyAccessException: Исключение произошло геттер из MedControlWeb.Models.Logs.Log.Code] NHibernate.Properties.BasicGetter.Get (целевой объект) +183 NHibernate.Engine.UnsavedValueFactory.GetUnsavedIdentifierValue (String unsavedValue, IGetter identifierGetter, IType identifierType, ConstructorInfo конструктор) +160 NHibernate.Tuple.PropertyFactory.BuildIdentifierProperty (PersistentClass mappedEntity, генератор IIdentifierGenerator) +200 NHibernate.Tuple.Entity.EntityMetamodel..ctor (PersistentClass persistentClass, ISessionFactoryImplementor sessionFactory) +775 NHiber nate.Persister.Entity.AbstractEntityPersister..ctor (PersistentClass persistentClass, кэш ICacheConcurrencyStrategy, ISessionFactoryImplementor завод) +835 NHibernate.Persister.Entity.UnionSubclassEntityPersister..ctor (PersistentClass persistentClass, кэш ICacheConcurrencyStrategy, ISessionFactoryImplementor завод, IMapping отображение) +220 NHibernate .Persister.PersisterFactory.CreateClassPersister (PersistentClass model, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping cfg) +369 NHibernate.Impl.SessionFactoryImpl..ctor (Конфигурация cfg, IMapping mapping, Настройки, прослушиватели EventListeners) +2199 NHibernate.Cfg. Configuration.BuildSessionFactory() +181
Мой HBM файл:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="MedControlWeb"
namespace="MedControlWeb.Models.Logs">
<class name="Log" abstract="true" lazy="false">
<id name="Code" column="code">
<generator class="hilo"/>
</id>
<property name="Description" column="description"/>
<property name="User" column="user"/>
<property name="Timestamp" column="timestamp"/>
<property name="Action" column="action"/>
<union-subclass name="SettingsLog" table="settings_log" lazy="false">
</union-subclass>
<union-subclass name="JobLog" table="job_log" lazy="false">
</union-subclass>
</class>
</hibernate-mapping>
Мой абстрактный класс супер:
public class Log
{
public int Code { get; set; }
public DateTime Timestamp { get; set; }
public MedControlWeb.Enums.Action Action { get; set; }
public string Description { get; set; }
public int User { get; set; }
}
Один из подклассов:
public class SettingsLog : Log
{
}
Где я буду неправильно?
Редактировать: Что можно сделать, чтобы решить эту проблему? Я не вижу, как я могу это исправить, так как у меня есть правильные методы получения?
Исключение кажется довольно ясным. Что вам особенно трудно понять? Если вам действительно нужна помощь, вы должны опубликовать лучший пример кода. См. Http://stackoverflow.com/help/mcve –
Спасибо за ответ! Мне жаль, я отредактировал вопрос. Я не вижу, как лучше делать геттер. Надеюсь, что да? –