C# ASubClass没有持久化程序(NHibernate.MappingException)——流畅

C# ASubClass没有持久化程序(NHibernate.MappingException)——流畅,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,在这里提问之前,我阅读了所有关于这个主题的帖子,但我找不到任何解决办法 我删除了我所有的域复杂性,我只考虑以下简单问题: 我有2个类(在域文件domain.cs中): 我的映射是(在另一个文件Mapping.cs中): public类BaseClassMap:ClassMap { 公共基类映射() { Id(x=>x.Id).GeneratedBy.HiLo(“1000”); Map(x=>x.Name); 区分子类子列(“类型”); } } 公共类ASubClassMap:子类映射 { 公共A

在这里提问之前,我阅读了所有关于这个主题的帖子,但我找不到任何解决办法

我删除了我所有的域复杂性,我只考虑以下简单问题:

我有2个类(在域文件domain.cs中):

我的映射是(在另一个文件Mapping.cs中):

public类BaseClassMap:ClassMap
{
公共基类映射()
{
Id(x=>x.Id).GeneratedBy.HiLo(“1000”);
Map(x=>x.Name);
区分子类子列(“类型”);
}
}
公共类ASubClassMap:子类映射
{
公共ASubClassMap()
{
Map(x=>x.prop);
鉴别器值(1);
}
}
首先,我让NHibernate为我创建数据库:

var cfg = new NHibernate.Cfg.Configuration();
Fluently.Configure(cfg)
   .Database(MsSqlConfiguration.MsSql2008
     .ConnectionString(connectionstring)
     .ShowSql())
     .Mappings(m => m
     .FluentMappings.AddFromAssemblyOf<BaseClass>()).BuildConfiguration();
new SchemaExport(cfg).Execute(false,true,false);
var cfg=new NHibernate.cfg.Configuration();
流利地配置(cfg)
.数据库(MsSqlConfiguration.MsSql2008
.ConnectionString(ConnectionString)
.ShowSql())
.Mappings(m=>m
.FluentMappings.AddFromAssemblyOf()).BuildConfiguration();
newschemaexport(cfg).Execute(false,true,false);
这非常有效,那么我的单元测试如下: 我在存储库中构建了一个会话工厂,并使用会话/事务来尝试保存一个空的子类:

var contract = new ASubClass();
IRepository<ASubClass> repository = new Repository<ASubClass>();
repository.Add(contract); >>> BUG HERE
var合同=新的ASubClass();
IRepository repository=新存储库();
repository.Add(合同);>>虫子在这里
这实际上是回购协议中的错误:
session.Save(contract)

我试图将Mapping.cs复制/粘贴到Domain.cs或更改
.FluentMappings.AddFromAssemblyOf
.FluentMappings.AddFromAssemblyOf

我还试图通过删除鉴别器和 区分子类子列关键字

到目前为止还没有工作


谢谢。

您的代码实际上对我来说很好

您的配置或存储库,或者您在单元测试中使用configuration+存储库的方式,一定有问题。我的意思是,您创建了一个新的存储库,这是否使用了您发布的配置?百分之百确定

您是否正在使用cfg构建存储库使用的
ISessionFactory
?e、 g

var factory = cfg.BuildSessionFactory();

可能会检查所有映射是否在同一个程序集中,否则会同时添加两个程序集。

谢谢,事实上,我忘了调用.BuildConfiguration()并在单元测试中结束Repo。如果没有你的评论,我永远不会看到它。Thks@user3091460它能回答你的问题吗?很酷,很高兴这能奏效。请将其标记为已回答,谢谢
var contract = new ASubClass();
IRepository<ASubClass> repository = new Repository<ASubClass>();
repository.Add(contract); >>> BUG HERE
var factory = cfg.BuildSessionFactory();