2014-11-28 1 views
0

После обновления до nHibernate (4.0.2.4000 через nuget), многие из многих сопоставлений, которые ранее работали, теперь вызывают исключение отображения «Не удалось определить тип для: nHibernateManyToMany.IRole, nHibernateManyToMany, для столбцов: NHibernate.Mapping. Колонка (идентификатор)»После обновления до nHibernate 4 нельзя использовать многоточечные сопоставления. Не удалось определить тип

Кажется, только для многих ко многим, и, если список является интерфейсом (т.е. список < Роль > против списка <IRole>).

Пример кода, который в настоящее время не удается:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var configuration = new Configuration().SetProperty(Environment.ReleaseConnections, "on_close") 
               .SetProperty(Environment.Dialect, typeof(SQLiteDialect).AssemblyQualifiedName) 
               .SetProperty(Environment.ConnectionDriver, typeof(SQLite20Driver).AssemblyQualifiedName) 
               .SetProperty(Environment.CollectionTypeFactoryClass, typeof(DefaultCollectionTypeFactory).AssemblyQualifiedName) 
               .SetProperty(Environment.CommandTimeout, "0"); 

     var mapper = new ModelMapper(); 

     mapper.AddMappings(new[] { typeof(EmployeeMapping), typeof(RoleMapping) }); 

     var hbmMapping = mapper.CompileMappingForAllExplicitlyAddedEntities(); 

     hbmMapping.autoimport = false; 

     configuration.AddMapping(hbmMapping); 

     // this line will fail 
     var factory = configuration.BuildSessionFactory(); 
    } 
} 

public class Employee 
{ 
    public virtual int Id { get; set; } 
    public virtual List<IRole> Roles { get; set; } 
} 

public interface IRole 
{ 
    int Id { get; set; } 
    string Description { get; set; } 
} 

public class Role : IRole 
{ 
    public virtual int Id { get; set; } 
    public virtual string Description { get; set; } 
} 

public class EmployeeMapping : ClassMapping<Employee> 
{ 
    public EmployeeMapping() 
    { 
     Id(c => c.Id, x => 
     { 
      x.Type(NHibernateUtil.Int32); 
      x.Generator(Generators.Identity); 
      x.Column("EmployeeId"); 
     }); 

     Bag(x => x.Roles, m => 
     { 
      m.Table("EmployeeRole"); 
      m.Key(km => 
      { 
       km.Column("EmployeeId"); 
       km.NotNullable(true); 
       km.ForeignKey("FK_Role_Employee"); 
      }); 
      m.Lazy(CollectionLazy.Lazy); 
     }, er => er.ManyToMany(m => 
     { 
      m.Class(typeof(Role)); 
      m.Column("RoleId"); 
     })); 
    } 
} 

public class RoleMapping : ClassMapping<Role> 
{ 
    public RoleMapping() 
    { 
     Id(c => c.Id, x => 
     { 
      x.Type(NHibernateUtil.Int32); 
      x.Generator(Generators.Identity); 
      x.Column("RoleId"); 
     }); 

     Property(x => x.Description, c => 
     { 
      c.Length(50); 
      c.NotNullable(true); 
     }); 
    } 
} 

Любая помощь или предложения о том, где мы могли бы искать детали того, как это изменилось с тех пор v3 будут оценены.

ответ

Смежные вопросы