在 Fluent NHibernate 中使用继承的映射修改数据库结构
Modifying database structure with inherited mappings in Fluent NHibernate
我有三个对象A、B和City,其中B继承了A。
A 包含此结构的 ID 和名称。
internal class AMap : ClassMap<A>
{
internal AMap()
{
Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable();
Map(x => x.Name).Length(255);
Table("A");
}
}
B 应该是包含 City 对象列表的扩展对象
internal class BMap : SubclassMap<B>
{
internal BMap()
{
HasManyToMany(x => x.Cities).Not.LazyLoad().AsBag().Table("B").Cascade.All();
}
}
这将导致以下数据库结构
Table A:
- ID
- Name
Table B:
- ID_A
- ID_City
应该是多对多关系,所以ID_A和ID_City可以在TableB
中出现多次
如何在 Fluent NHibernate 映射中实现此结构?
谢谢,
异种
我能够解决这个问题,所以这是头疼的结果:
internal class AMap : ClassMap<A>
{
internal AMap()
{
Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable();
Map(x => x.Name).Length(255);
Map(x => x.Type).Column("ObjType");
DiscriminateSubClassesOnColumn(@"Type");
Table("A");
}
}
internal class BMap : SubclassMap<B>
{
internal BMap()
{
HasManyToMany(x => x.Cities).Not.LazyLoad().AsBag().Table("B").Cascade.All();
}
}
我添加了一个Type字段,它标识了每个子类,然后DiscriminateSubClassesOnColumn
存储了一个对象的Type-Information在A-Table.
B-Table 不存在了,但是类型 B 的每个对象都有一个映射 table 到它的 City-Objects
我有三个对象A、B和City,其中B继承了A。
A 包含此结构的 ID 和名称。
internal class AMap : ClassMap<A>
{
internal AMap()
{
Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable();
Map(x => x.Name).Length(255);
Table("A");
}
}
B 应该是包含 City 对象列表的扩展对象
internal class BMap : SubclassMap<B>
{
internal BMap()
{
HasManyToMany(x => x.Cities).Not.LazyLoad().AsBag().Table("B").Cascade.All();
}
}
这将导致以下数据库结构
Table A:
- ID
- Name
Table B:
- ID_A
- ID_City
应该是多对多关系,所以ID_A和ID_City可以在TableB
中出现多次如何在 Fluent NHibernate 映射中实现此结构?
谢谢, 异种
我能够解决这个问题,所以这是头疼的结果:
internal class AMap : ClassMap<A>
{
internal AMap()
{
Id(x => x.ID).GeneratedBy.Assigned().Not.Nullable();
Map(x => x.Name).Length(255);
Map(x => x.Type).Column("ObjType");
DiscriminateSubClassesOnColumn(@"Type");
Table("A");
}
}
internal class BMap : SubclassMap<B>
{
internal BMap()
{
HasManyToMany(x => x.Cities).Not.LazyLoad().AsBag().Table("B").Cascade.All();
}
}
我添加了一个Type字段,它标识了每个子类,然后DiscriminateSubClassesOnColumn
存储了一个对象的Type-Information在A-Table.
B-Table 不存在了,但是类型 B 的每个对象都有一个映射 table 到它的 City-Objects