У меня возникают проблемы с использованием ActiveRecord с интерфейсами. Когда я использую его без интерфейсов, все работает, но когда я использую его с интерфейсами, он работает иногда, а не иногда, и он очень случайный. Если он будет работать, он продолжит работу до тех пор, пока некоторые изменения не будут внесены в мой проект и не перекомпилируются. Затем, если он перестанет работать, это не сработает, пока я снова не сделаю некоторые несвязанные изменения и не перекомпиляю. Ниже вы можете увидеть мои модели. У вас есть представление о том, как я могу это решить?Сбой ActiveRecord с интерфейсами
[ActiveRecord]
public class ContactInformation : ActiveRecordValidationBase<ContactInformation>
{
public ContactInformation()
{
Emails = new List<Email>();
}
[PrimaryKey]
public int Id { get; set; }
[HasMany(typeof(Email), Cascade = ManyRelationCascadeEnum.AllDeleteOrphan, "type='1'")]
private IList<Email> Emails { get; set; }
[ActiveRecord("Details",
DiscriminatorColumn = "int",
DiscriminatorType = "type",
DiscriminatorValue = "1")]
public class Email : Detail<Email>
[ActiveRecord("Details",
DiscriminatorColumn = "int",
DiscriminatorType = "type",
DiscriminatorValue = "0")]
public class Detail<T> : ActiveRecordValidationBase<T>, IDetail where T : class
{
[PrimaryKey]
public int Id { get; set; }
[BelongsTo]
public ContactInformation ParentContactInformation { get; set; }
public interface IDetail
{
int Id { get; set; }
ContactInformation ParentContactInformation { get; set; }
}
следующее исключение:
SetUp : System.NullReferenceException : Object reference not set to an instance of an object.
at Castle.ActiveRecord.Framework.Internal.XmlGenerationVisitor.WriteCompositeColumns(String[] columns)
at Castle.ActiveRecord.Framework.Internal.XmlGenerationVisitor.WriteCollection(ManyRelationCascadeEnum cascadeEnum, Type targetType, RelationType type, String name, String accessString, String table, String schema, Boolean lazy, Boolean inverse, String orderBy, String where, String sort, String columnKey, String[] compositeKeyColumnKeys, String element, Type elementType, String columnRef, String[] compositeKeyColumnRefs, IVisitable extraModel, String index, String indexType, CacheEnum cache, String cacheregion, NotFoundBehaviour notFoundBehaviour, FetchEnum fetch, Int32 batchSize, Type collectionType)
at Castle.ActiveRecord.Framework.Internal.XmlGenerationVisitor.VisitHasMany(HasManyModel model)
at Castle.ActiveRecord.Framework.Internal.HasManyModel.Accept(IVisitor visitor)
at Castle.ActiveRecord.Framework.Internal.AbstractDepthFirstVisitor.VisitNodes(IEnumerable nodes)
at Castle.ActiveRecord.Framework.Internal.XmlGenerationVisitor.VisitModel(ActiveRecordModel model)
at Castle.ActiveRecord.Framework.Internal.XmlGenerationVisitor.CreateXml(ActiveRecordModel model)
at Castle.ActiveRecord.ActiveRecordStarter.AddXmlToNHibernateCfg(ISessionFactoryHolder holder, ActiveRecordModelCollection models)
at Castle.ActiveRecord.ActiveRecordStarter.RegisterTypes(ISessionFactoryHolder holder, IConfigurationSource source, IEnumerable`1 types, Boolean ignoreProblematicTypes)
at Castle.ActiveRecord.ActiveRecordStarter.Initialize(IConfigurationSource source, Type[] types)
at Castle.ActiveRecord.ActiveRecordStarter.Initialize(Assembly[] assemblies, IConfigurationSource source, Type[] additionalTypes)
at Castle.ActiveRecord.ActiveRecordStarter.Initialize(Assembly assembly, IConfigurationSource source)
at tests.Framework.ModelTests.SetUpFixture() in ModelTests.cs: line 18
Это мой SetUpFixture
[TestFixtureSetUp]
public void SetUpFixture()
{
if (ActiveRecordStarter.IsInitialized) return;
IConfigurationSource source = ActiveRecordSectionHandler.Instance;
ActiveRecordStarter.Initialize(Assembly.Load("Model"), source);
XmlConfigurator.Configure();
}
Я проверил файлы, созданные и детали файлов имеет это имя файла Detail`1.hbm.xml и это обратные одиночные кавычки содержание:
<?xml version="1.0" encoding="utf-16"?>
<hibernate-mapping auto-import="true" default-lazy="false" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:nhibernate-mapping-2.2">
<class name="Model.Contact.Detail`1, Model" table="Details" discriminator-value="0">
<id name="Id" access="property" column="Id" type="Int32" unsaved-value="0">
<generator class="native">
</generator>
</id>
<discriminator column="type" type="int" />
<property name="Owner" access="property" type="String">
<column name="Owner"/>
</property>
<property name="Location" access="property" type="String">
<column name="Location"/>
</property>
<property name="ContactDetail" access="property" type="String">
<column name="ContactDetail"/>
</property>
<many-to-one name="ParentContactInformation" access="property" class="Model.ContactInformation,Model" column="ParentContactInformation" lazy="proxy" />
<subclass name="Model.Contact.Email, Model" discriminator-value="3">
</subclass>
<subclass name="Model.Contact.Phone, Model" discriminator-value="1">
</subclass>
<subclass name="Model.Contact.Fax, Model" discriminator-value="2">
</subclass>
</class>
</hibernate-mapping>
, основная проблема все еще существует: нет смысла отображать открытые общие классы. – 2010-12-20 02:40:09