Fluent nHibernate:不支持的映射类型
我正在设置一个新的解决方案来映射从Access数据库导入的SQL数据。自动映射可以很好地处理我定义的实体,但是我需要能够使用Fluent映射类型来访问.NotFound.Ignore扩展 我在另一个项目中使用了完全相同的语法(我想!),效果很好。我是否犯了学童错误导致“不支持的映射类型'IT.Classes.Entities.Admin'”?非常感谢您的帮助 DDL: 实体:Fluent nHibernate:不支持的映射类型,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,我正在设置一个新的解决方案来映射从Access数据库导入的SQL数据。自动映射可以很好地处理我定义的实体,但是我需要能够使用Fluent映射类型来访问.NotFound.Ignore扩展 我在另一个项目中使用了完全相同的语法(我想!),效果很好。我是否犯了学童错误导致“不支持的映射类型'IT.Classes.Entities.Admin'”?非常感谢您的帮助 DDL: 实体: namespace IT.Classes.Entities { public class Admin {
namespace IT.Classes.Entities
{
public class Admin
{
public virtual bool EmailUser { get; set; }
public virtual string HelpdeskMessage { get; set; }
public virtual string HighPriorityEmail { get; set; }
public virtual int Id { get; set; }
public virtual string MobileEmail { get; set; }
public virtual string PrimaryEmail { get; set; }
public virtual string SecondaryEmail { get; set; }
}
}
映射:
使用FluentNHibernate.Mapping;
使用IT.class.enties
namespace IT.Classes.Mappings
{
public sealed class AdminMap : ClassMap<Admin>
{
public AdminMap()
{
this.Id(x => x.Id);
this.Map(x => x.EmailUser);
this.Map(x => x.HelpdeskMessage);
this.Map(x => x.HighPriorityEmail);
this.Map(x => x.MobileEmail);
this.Map(x => x.PrimaryEmail);
this.Map(x => x.SecondaryEmail);
}
}
}
在配置代码中,Fluent映射中提到的类型应该是映射类,而不是被映射的类 也就是说,而不是:
return
Fluently.Configure().Database(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
.Mappings(m => m.FluentMappings.Add<Admin>())
.Mappings(m => m.FluentMappings.Add<Applications>())
.Mappings(m => m.FluentMappings.Add<Category>())
.Mappings(m => m.FluentMappings.Add<Log>())
.Mappings(m => m.FluentMappings.Add<Multipliers>())
.Mappings(m => m.FluentMappings.Add<Os>())
.Mappings(m => m.FluentMappings.Add<Priority>())
.Mappings(m => m.FluentMappings.Add<Request>())
.Mappings(m => m.FluentMappings.Add<Status>())
.BuildSessionFactory();
返回
流利地。配置()数据库(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionString[“ITHelpdesk”].ConnectionString))
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.BuildSessionFactory();
你需要说:
return
Fluently.Configure().Database(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
.Mappings(m => m.FluentMappings.Add<AdminMap>())
.Mappings(m => m.FluentMappings.Add<ApplicationsMap>())
.Mappings(m => m.FluentMappings.Add<CategoryMap>())
.Mappings(m => m.FluentMappings.Add<LogMap>())
.Mappings(m => m.FluentMappings.Add<MultipliersMap>())
.Mappings(m => m.FluentMappings.Add<OsMap>())
.Mappings(m => m.FluentMappings.Add<PriorityMap>())
.Mappings(m => m.FluentMappings.Add<RequestMap>())
.Mappings(m => m.FluentMappings.Add<StatusMap>())
.BuildSessionFactory();
返回
流利地。配置()数据库(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionString[“ITHelpdesk”].ConnectionString))
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.Mappings(m=>m.FluentMappings.Add())
.BuildSessionFactory();
更好的是,为了避免每个类映射都有单独的行,请使用.AddFromAssemblyOf()方法,该方法使用反射来添加给定程序集中的所有类映射:
return
Fluently.Configure().Database(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<AdminMap>())
.BuildSessionFactory();
返回
流利地。配置()数据库(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionString[“ITHelpdesk”].ConnectionString))
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
.BuildSessionFactory();
我认为表上缺少主键可能是导致问题的原因,因此我将Id列设置为PK,但仍然是相同的错误。进一步考虑-创建了一个空白数据库,并使用架构生成工具尝试自动创建表,并排除数据库本身的任何问题。此操作仍然失败,并出现相同的错误。何时发生异常?请发布完整的例外!Exception.ToString()是您唯一的类吗?可能您是从另一个接口引用它,并使用Map
而不是References
@ColeW。我已将堆栈跟踪放在问题的主体中。更好的方法是将所有映射继承到某个接口,例如IMap和use.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
---> FluentNHibernate.Cfg.FluentConfigurationException: An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
---> System.InvalidOperationException: Unsupported mapping type 'IT.Classes.Entities.Admin'
at FluentNHibernate.PersistenceModel.Add(Type type) in d:\Builds\FluentNH\src\FluentNHibernate\PersistenceModel.cs:line 152
at FluentNHibernate.Cfg.FluentMappingsContainer.Apply(PersistenceModel model) in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentMappingsContainer.cs:line 127
at FluentNHibernate.Cfg.MappingConfiguration.Apply(Configuration cfg) in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\MappingConfiguration.cs:line 84
at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 252
--- End of inner exception stack trace ---
at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 264
at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 230
--- End of inner exception stack trace ---
at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d:\Builds\FluentNH\src\FluentNHibernate\Cfg\FluentConfiguration.cs:line 235
at ConsoleChecker.Program.CreateItHelpdeskSessionFactory() in E:\code\code_testing\2010\ASPHelpdesks\ConsoleChecker\Program.cs:line 48
at ConsoleChecker.Program.GetRequests() in E:\code\code_testing\2010\ASPHelpdesks\ConsoleChecker\Program.cs:line 40
at ConsoleChecker.Program.Main(String[] args) in E:\code\code_testing\2010\ASPHelpdesks\ConsoleChecker\Program.cs:line 24
return
Fluently.Configure().Database(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
.Mappings(m => m.FluentMappings.Add<Admin>())
.Mappings(m => m.FluentMappings.Add<Applications>())
.Mappings(m => m.FluentMappings.Add<Category>())
.Mappings(m => m.FluentMappings.Add<Log>())
.Mappings(m => m.FluentMappings.Add<Multipliers>())
.Mappings(m => m.FluentMappings.Add<Os>())
.Mappings(m => m.FluentMappings.Add<Priority>())
.Mappings(m => m.FluentMappings.Add<Request>())
.Mappings(m => m.FluentMappings.Add<Status>())
.BuildSessionFactory();
return
Fluently.Configure().Database(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
.Mappings(m => m.FluentMappings.Add<AdminMap>())
.Mappings(m => m.FluentMappings.Add<ApplicationsMap>())
.Mappings(m => m.FluentMappings.Add<CategoryMap>())
.Mappings(m => m.FluentMappings.Add<LogMap>())
.Mappings(m => m.FluentMappings.Add<MultipliersMap>())
.Mappings(m => m.FluentMappings.Add<OsMap>())
.Mappings(m => m.FluentMappings.Add<PriorityMap>())
.Mappings(m => m.FluentMappings.Add<RequestMap>())
.Mappings(m => m.FluentMappings.Add<StatusMap>())
.BuildSessionFactory();
return
Fluently.Configure().Database(
MsSqlConfiguration.MsSql2008.ConnectionString(
ConfigurationManager.ConnectionStrings["ITHelpdesk"].ConnectionString))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<AdminMap>())
.BuildSessionFactory();