ASubClass没有持久性(NHibernate.MappingException) - 流利

时间:2014-01-15 18:00:44

标签: c# nhibernate fluent-nhibernate

在询问此处之前,我阅读了有关该主题的所有帖子,但我找不到任何解决方案。

我删除了所有域名复杂性,我要回答以下简单问题:

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

public abstract class BaseClass
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
}

public class ASubClass : BaseClass
{
    public ASubClass() {}
    public virtual string prop { get; set; }
}

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

public class BaseClassMap : ClassMap<BaseClass>
{
    public BaseClassMap ()
    {
        Id(x => x.ID).GeneratedBy.HiLo("1000");
        Map(x => x.Name);
        DiscriminateSubClassesOnColumn("Type");
    }
}
public class ASubClassMap : SubclassMap<ASubClass>
{
    public ASubClassMap ()
    {
        Map(x => x.prop);
        DiscriminatorValue(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);

这很好用,然后我的单元测试如下: 我在存储库中构建了一个会话工厂,并使用Session / Transaction来尝试保存一个空的SubClass:

var contract = new ASubClass();
IRepository<ASubClass> repository = new Repository<ASubClass>();
repository.Add(contract); >>> BUG HERE

这实际上就是线路上的错误(在回购内部):session.Save(contract);

我尝试将Mapping.cs复制/粘贴到Domain.cs中或更改其属性 .FluentMappings.AddFromAssemblyOf<BaseClass>.FluentMappings.AddFromAssemblyOf<BaseClassMap>

我还试图通过删除 Discriminator 来改变子类的层次结构 DiscriminateSubClassesOnColumn 关键字。

到目前为止还没有工作。

感谢。

1 个答案:

答案 0 :(得分:1)

你的代码实际上适合我。

您的配置或存储库必定存在问题,或者您在单元测试中如何使用配置+存储库。我的意思是,你创建了一个新的Repository,它是否使用你发布的配置? 100%肯定?

您是否正在使用cfg构建存储库使用的ISessionFactory?例如

var factory = cfg.BuildSessionFactory();

也许检查所有映射是否在同一个程序集中,否则添加两个程序集。