6

Tôi có một lớp miền:Không thể đúc 'NHibernate.Collection.Generic.PersistentGenericSet`1 để 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; } 

} 

Với quy ước này (được định nghĩa như quy định AsSet)

public class AgenciaConvention : IAutoMappingOverride<Agencia> 
{ 
    public void Override(AutoMapping<Agencia> mapping) 
    { 
     mapping.HasManyToMany(a => a.Gerentes).Cascade.AllDeleteOrphan().AsSet().Not.Inverse(); 
    } 
} 

Khi tôi chạy thử nghiệm này:

[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 
} 

Làm thế nào tôi có thể kiểm tra danh sách này?

The collection should be AsSet , it necessary that the Parent and Children fields are PK, FK

Full Lỗi:

Tên thí nghiệm: AgenciaTemVariosGerentes thử nghiệm FullName: {} Bỏ qua phần .Integration.Test.AgenciaTest.AgenciaTemVariosGerentes Kiểm tra Nguồn: {} Bỏ qua phần .Integration.Test \ AgenciaTest.cs : dòng 22 thử nghiệm Kết quả: Không Kiểm tra Thời gian: 0: 00: 02,4093555

Kết quả nhắn: phương pháp thử {Bỏ qua phần} .Integration.Test.AgenciaTest.Agen ciaTemVariosGerentes đã ném ngoại lệ: NHibernate.PropertyAccessException: Cast không hợp lệ (kiểm tra ánh xạ của bạn cho các loại thuộc tính không phù hợp); setter của CreditoImobiliarioBB.Model.Regional ---> System.InvalidCastException: Không thể truyền đối tượng kiểu 'NHibernate.Collection.Generic.PersistentGenericSet 1[CreditoImobiliarioBB.Model.Pessoa]' to type 'System.Collections.Generic.IList 1 [CreditoImobiliarioBB.Model.Pessoa]'. quả StackTrace:
tại (Object, Object [], SetterCallback) tại NHibernate.Bytecode.Lightweight.AccessOptimizer.SetPropertyValues ​​(mục tiêu Object, Object [giá trị]) tại NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValuesWithOptimizer (thực thể Object , Object [] values) --- Kết thúc dấu vết ngăn xếp ngoại lệ bên trong --- tại NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValuesWithOptimizer (đối tượng Object, Object [] values) tại NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValues (Object entity, Object [] values) tại NHibernate.Persister.Entity.AbstractEntityPersister.SetPropertyValues ​​(Object obj, Object [] values, EntityMode entityMode) tại NHibernate.Event.Default.AbstractSav eEventListener.PerformSaveOrReplicate (đối tượng Object, khóa EntityKey, IEntityPersister persister, Boolean useIdentityColumn, Object bất kỳ, nguồn IEventSource, Boolean requireImmediateIdAccess) tại NHibernate.Event.Default.AbstractSaveEventListener.PerformSave (đối tượng Object, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object bất cứ điều gì, IEventSource nguồn, Boolean requiresImmediateIdAccess) tại NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId (Object entity, string Tên pháp nhân, đối tượng bất cứ điều gì, nguồn IEventSource, Boolean requiresImmediateIdAccess) tại NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId (SaveOrUpdateEvent sự kiện) tại NHibernate.Event.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId (SaveOrUpdateEvent event) tại NHibernate.Eve nt.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient (SaveOrUpdateEvent sự kiện) tại NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate (SaveOrUpdateEvent sự kiện) tại NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate (SaveOrUpdateEvent sự kiện) tại NHibernate.Impl.SessionImpl.FireSave (Sự kiện SaveOrUpdateEvent) tại NHibernate.Impl.SessionImpl.Save (Object obj) tại FluentNHibernate.Testing.PersistenceSpecification 1.TransactionalSave(Object propertyValue) at FluentNHibernate.Testing.Values.ReferenceProperty 2.HasRegistered (PersistenceSpecification 1 specification) at FluentNHibernate.Testing.PersistenceSpecification 1.RegisterCheckedProperty (tài sản 1 property, IEqualityComparer equalityComparer) at FluentNHibernate.Testing.PersistenceSpecificationExtensions.CheckReference[T](PersistenceSpecification 1 spec, biểu Expression`1, Object propertyValue, IEqualityComparer propertyComparer) tại CreditoImobiliarioBB.Repository.Integration.Test.AgenciaTest.AgenciaTemVariosGerentes() trong {} Bỏ qua phần .Integration. test \ AgenciaTest.cs:. dòng 27

Cảm ơn

Trả lời

11

Bộ không thực hiện IList<T>

Xác định tài sản của bạn như ICollection<T> thay

..
Các vấn đề liên quan