【发布时间】:2010-03-12 14:11:01
【问题描述】:
我正在尝试使用流利的自动映射功能来生成一个 以下模型和程序的 DDL,但不知何故我不断得到 我打电话时出现错误“关联引用未映射的类:IRole” NHibernate 中的 GenerateSchemaCreationScript 方法。当我更换 具有接口实现的 IList 的类型(用户 和角色)一切正常。我在这里做错了什么?我怎样才能 流畅地使用定义的 IUser 和 IRole 的实现版本 在 Unity 中?
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; }
}
我使用以下程序使用以下程序生成 DDL NHibernate 中的 GenerateSchemaCreationScript:
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);
}
}
【问题讨论】:
标签: nhibernate unity-container fluent automapping