C# ASubClass没有持久化程序(NHibernate.MappingException)——流畅
在这里提问之前,我阅读了所有关于这个主题的帖子,但我找不到任何解决办法 我删除了我所有的域复杂性,我只考虑以下简单问题: 我有2个类(在域文件domain.cs中): 我的映射是(在另一个文件Mapping.cs中):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
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();