Fluent NHibernate-联接子类ForeignKey名称
我正在考虑迁移到Fluent NHibernate—到目前为止,我遇到的唯一问题是不能在连接的子类映射上指定外键名称 有人对此有解决方案或解决方法吗 我发现,但该建议显然没有添加到代码中 如果可能的话,我希望避免自己定制代码 任何帮助都会很好 例如:Fluent NHibernate-联接子类ForeignKey名称,nhibernate,foreign-keys,subclass,fluent,Nhibernate,Foreign Keys,Subclass,Fluent,我正在考虑迁移到Fluent NHibernate—到目前为止,我遇到的唯一问题是不能在连接的子类映射上指定外键名称 有人对此有解决方案或解决方法吗 我发现,但该建议显然没有添加到代码中 如果可能的话,我希望避免自己定制代码 任何帮助都会很好 例如: public class Product { public string Name { get; set; } } public class Hammer : Product { public string Description
public class Product
{
public string Name { get; set; }
}
public class Hammer : Product
{
public string Description { get; set; }
}
public class ProductMap : ClassMap<Product, long>
{
public ProductMap()
{
Polymorphism.Implicit();
Map(x => x.Name);
}
}
public class HammerMap : SubclassMap<Hammer>
{
public HammerMap()
{
Extends<Product>();
}
}
公共类产品
{
公共字符串名称{get;set;}
}
公共类锤子:产品
{
公共字符串说明{get;set;}
}
公共类ProductMap:ClassMap
{
公共产品地图()
{
多态性。隐式();
Map(x=>x.Name);
}
}
公共类HammerMap:子类map
{
公共地图()
{
扩展();
}
}
这会产生如下结果:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="field.camelcase-underscore" auto-import="false" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" dynamic-insert="true" dynamic-update="true" mutable="true" polymorphism="implicit" optimistic-lock="version" name="Domain.Product, Domain" table="Product">
<id name="Id" type="System.Int64">
<column name="Id" />
<generator class="native">
<param name="sequence">ProductId</param>
</generator>
</id>
<property name="Name" type="System.String">
<column name="Name" />
</property>
<joined-subclass name="Domain.Hammer, Domain" table="Hammer">
<key>
<column name="Product_Id" />
</key>
<property name="Description" type="System.String">
<column name="Description" />
</property>
</joined-subclass>
</class>
</hibernate-mapping>
产品ID
请注意,映射hbm文件中没有指定外键名称-如中所示:
<joined-subclass name="Domain.Hammer, Domain" table="Hammer">
<key column="Product_Id" foreign-key="FK_Hammer_Product"/>
</joined-subclass>
试试这样的方法
public class JoinedSubclassForeignKeyConvention : IJoinedSubclassConvention
{
public void Apply(IJoinedSubclassInstance instance)
{
instance.Key.ForeignKey(string.Format("FK_{0}_{1}",
instance.EntityType.Name, instance.Type.Name));
}
}