J'essaie d'utiliser la fonctionnalité automap pour générer un DDL pour le modèle et le programme suivants, mais je reçois toujours l'erreur . Classe non mappée: IRole "lorsque j'appelle la méthode GenerateSchemaCreationScript dans NHibernate. Quand je remplace le type des ILists avec l'implémentation des interfaces (User et Role) tout fonctionne bien. Qu'est-ce que je fais mal ici? Comment puis-je utiliser couramment les versions implémentées de IUser et IRole telles que définies dans dans Unity?Erreur lors de l'utilisation des interfaces dans le modèle
public interface IRole
{
string Title { get; set; }
IList<IUser> Users { get; set; }
}
public interface IUser
{
string Email { get; set; }
IList<IRole> Roles { get; set; }
}
public class Role : IRole
{
public virtual string Title { get; set; }
public virtual IList<IUser> Users { get; set; }
}
public class User : IUser
{
public virtual string Email { get; set; }
public virtual IList<IRole> Roles { get; set; }
}
J'utilise le programme suivant pour générer le DDL à l'aide du GenerateSchemaCreationScript dans NHibernate:
class Program
{
static void Main(string[] args)
{
var ddl = new NHibernateSessionManager();
ddl.BuildConfiguration();
}
}
public class NHibernateSessionManager
{
private ISessionFactory _sessionFactory;
private static IUnityContainer _container;
private static void InitContainer()
{
_container = new UnityContainer();
_container.RegisterType(typeof(IUser), typeof(User));
_container.RegisterType(typeof(IRole), typeof(Role));
}
public ISessionFactory BuildConfiguration()
{
InitContainer();
return
Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
.ConnectionString("ConnectionString"))
.Mappings(m => m.AutoMappings.Add(
AutoMap.AssemblyOf<IUser>()))
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
private void BuildSchema(Configuration cfg)
{
var ddl = cfg.GenerateSchemaCreationScript(new
NHibernate.Dialect.MsSql2008Dialect());
System.IO.File.WriteAllLines("Filename", ddl);
}
}
Désolé à ce sujet - Il faut bien sûr: .Mappings (m = > m.AutoMappings.Add ( AutoMap.AssemblyOf())) Mais mon problème est toujours le même, je reçois des erreurs sur: public virtual IList Utilisateurs {get; ensemble; } et public virtual IList Rôles {get; ensemble; } Des idées pour résoudre ce problème? –
Bjarke
Voir le montage de ma réponse originale. –
Selon http://steve-fair-dev.blogspot.com/2009/10/nhibernate-entity-property-is-interface.html, il est possible de dire à NHibernate quelle implémentation il doit utiliser pour une interface (en utilisant des dossiers). Je me demande simplement s'il existe un moyen de laisser le savoir-faire de Fluent savoir la même chose? – Bjarke