Nir*_*raj 9 nhibernate abstract-class fluent-nhibernate automapping table-per-class
我有以下场景
public abstract class BaseClass
{
public virtual int Id {get; set};
public virtual string Name {get; set;}
}
public class FirstSubClass : BaseClass
{
//properties and behaviour here
}
public class SecondSubClass : BaseClass
{
//properties of SecondSubclass Here
}
public class ProcessStep
{
public virtual IList<BaseClass> ContentElements {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
对于映射我使用了以下代码片段: -
this._sessionFactory =
Fluently.Configure().Database(SQLiteConfiguration.Standard
.ConnectionString(@"Data Source=SqliteTestSqlDataAccess.s3db; Version=3; New=True; Pooling=True; Max Pool Size=1;"))
.Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(assemblyWithDomainClasses).Conventions.Add(DefaultCascade.All())))
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
默认情况下,fluent将忽略作为BaseClass的抽象基类.但是在ProcessStep类中有返回IList的属性ContentElements ,我得到一个异常: - NHibernate.MappingException:关联引用未映射的类:BaseClass
如果我使用IncludeBase(typeof(BaseClass))包含基类,那么它工作正常,但它为BaseClass和Derived类创建一个表,并且记录与FK-PK关系(每个子类的表)链接.我想要实现的是每个具体类的表.也就是说,每个派生类都有自己的表,其中将存在基类中派生类+属性的所有属性.知道如何实现它吗?
由于我没有看到你的映射,让我提供我的.你可以通过这样做来实现这一点
public class BaseClassMap:ClassMap<BaseClass>
{
public BaseClassMap()
{
/*
* Identity generator can't be native because subclass objects should be unique
* So use HiLo or Guid or other generators which will generate unique id on the child tables
*/
Id(x => x.Id).GeneratedBy.Guid();
Map(x => x.Name);
UseUnionSubclassForInheritanceMapping(); // This is important - uses union-subclass mappings for the derived classes
}
}
public class FirstSubClassMap : SubclassMap<FirstSubClass>
{
public FirstSubClassMap()
{
Table("FirstSubClassTable");
// Map properties for FirstSubClass
}
}
public class SecondSubClassMap : SubclassMap<SecondSubClass>
{
public SecondSubClassMap()
{
Table("SecondSubClassTable");
// Map properties for SecondSubClass
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2811 次 |
| 最近记录: |