için 'NHibernate.Collection.Generic.PersistentGenericSet`1 döküm edilemiyor Bu sözleşme ilebir alan sınıfı System.Collections.Generic.IList`1
public class Agencia : IEntity
{
public virtual int Id { get; set; }
public virtual string Nome { get; set; }
public virtual string Identificacao { get; set; }
public virtual IList<Pessoa> Gerentes { get; protected set; }
public Agencia()
{
Gerentes = new List<Pessoa>();
}
public virtual void AddGerente(Pessoa gerente)
{
Gerentes.Add(gerente);
}
public virtual void AddGerentes(params Pessoa[] gerentes)
{
Parallel.ForEach(gerentes, (pessoa) => Gerentes.Add(pessoa));
}
}
public class Pessoa: IEntity
{
public virtual int Id { get; set; }
public virtual string Nome { get; set; }
}
(set
AsSet
olarak tanımlanır)
public class AgenciaConvention : IAutoMappingOverride<Agencia>
{
public void Override(AutoMapping<Agencia> mapping)
{
mapping.HasManyToMany(a => a.Gerentes).Cascade.AllDeleteOrphan().AsSet().Not.Inverse();
}
}
Ben bu testi çalıştırın:
[TestMethod]
[Description("Uma agência tem vários gerêntes")]
public void AgenciaTemVariosGerentes()
{
// Arrange
var fix = new Fixture();
var currentUser = GetLoggedUser();
// Create a List<Pessoa>
var gerentes = fix.Build<Pessoa>()
.With(p => p.Nome)
.With(p => p.CPF)
.With(p => p.CreateBy, currentUser)
.OmitAutoProperties()
.CreateMany<Pessoa>(10).ToList();
// Action
new PersistenceSpecification<Agencia>(Session)
.CheckProperty(p => p.Nome, fix.Create<string>().Truncate(80))
.CheckProperty(p => p.Identificacao, fix.Create<string>().Truncate(10))
.CheckReference(p => p.Regional,
fix.Build<Regional>()
.With(p => p.Nome)
.OmitAutoProperties()
.Create()
, new IDEqualityComparer())
.CheckList(p => p.Gerentes, gerentes, new IDEqualityComparer())
.CheckReference(p => p.CreateBy, currentUser, new IDEqualityComparer())
.VerifyTheMappings(); // Assert
}
nasıl bu listeyi test edebilirsiniz?
The collection should be
AsSet
, it necessary that the Parent and Children fields are PK, FK
Tam Hata:
Test Adı: AgenciaTemVariosGerentes Testi FullName: {OMMITED} .Integration.Test.AgenciaTest.AgenciaTemVariosGerentes Testi Kaynak: {OMMITED} .Integration.Test \ AgenciaTest.cs : hattı 22 test Sonuç: başarısız test Süresi: 0: 00: 02,4093555
Sonuç mesaj: test yöntemi {OMMITED} .Integration.Test.AgenciaTest.Agen ciaTemVariosGerentes istisnayı attı: NHibernate.PropertyAccessException: Invalid Cast (özellik tipi uyuşmazlıkları için eşlemenizi kontrol edin); CreditoImobiliarioBB.Model.Regional ---> System.InvalidCastException setter: 'NHibernate.Collection.Generic.PersistentGenericSet 1[CreditoImobiliarioBB.Model.Pessoa]' to type 'System.Collections.Generic.IList
1 [CreditoImobiliarioBB.Model.Pessoa]' türünde nesne dökümü yapılamıyor. Sonuç StackTrace: en
([] değerleri nesne, nesne hedef) NHibernate.Bytecode.Lightweight.AccessOptimizer.SetPropertyValues de (Object, [] SetterCallback Object) NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValuesWithOptimizer de (Obje işletme , NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValues de ) [] değerleri Nesne NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValuesWithOptimizer (Obje öğede) iç durum yığın izlemesi --- arasında --- End [] değerleri Nesne (Nesne varlığı, Nesne [] değerleri) NHibernate.Persister.Entity.AbstractEntityPersister.SetPropertyValues öğesinde (Object obj, Object [] değerleri, EntityMode entityMode) , NHibernate.Event.Default.AbstractSav eEventListener.PerformSaveOrReplicate NHibernate.Event.Default.AbstractSaveEventListener.PerformSave (Nesne varlık, nesne kimliği, IEntityPersister persister, Boole useIdentityColumn, Nesne en (Nesne varlık EntityKey anahtar, IEntityPersister persister, Boole useIdentityColumn şey, IEventSource kaynak, Boole requiresImmediateIdAccess Nesne) şey, IEventSource kaynak NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId (Object varlık, dize VarlıkAdı de, Boole requiresImmediateIdAccess) , NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId bir şey, IEventSource kaynak, Boole requiresImmediateIdAccess) Nesne (SaveOrUpdateEvent olay) NHibernate.Eve adresinden numaralı telefondan NHibernate.Eve.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId (SaveOrUpdateEvent olayı) NHibernate.Impl.SessionImpl.FireSave de NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate (SaveOrUpdateEvent etkinlik) de NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate (SaveOrUpdateEvent etkinlik) de nt.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient (SaveOrUpdateEvent etkinlik) (SaveOrUpdateEvent olayı) adresindeki NHibernate.Impl.SessionImpl.Save (Object obj) adresinden FluentNHibernate.Testing.PersistenceSpecification 1.TransactionalSave(Object propertyValue) at FluentNHibernate.Testing.Values.ReferenceProperty
2.HasRegistered (PersistenceSpecification 1 specification) at FluentNHibernate.Testing.PersistenceSpecification
1.RegisterCheckedProperty (Özellik 1 property, IEqualityComparer equalityComparer) at FluentNHibernate.Testing.PersistenceSpecificationExtensions.CheckReference[T](PersistenceSpecification
{OMMITED} .Integration 1 spec Expression`1 ifadesi, CreditoImobiliarioBB.Repository.Integration.Test.AgenciaTest.AgenciaTemVariosGerentes de PropertyValue, IEqualityComparer propertyComparer) (Obje). deney \ AgenciaTest.cs. satır 27
Teşekkür