Fluent nhibernate 使用Fluent Nhibernate为所有关系类型设置外键约束名称约定
}Fluent nhibernate 使用Fluent Nhibernate为所有关系类型设置外键约束名称约定,fluent-nhibernate,fluent-nhibernate-mapping,Fluent Nhibernate,Fluent Nhibernate Mapping,} 上面的代码允许我在类型引用的情况下更改外键关系的命名约定。如何实现IHasManyConvention name和IHasManyToManyConvention的相同结果。IReferenceConvention的名称更改约定完美地展示了这一点,但我没有谈到其他类型的关系。对于有许多,我使用: public class ReferenceConvention : IReferenceConvention{ public void Apply(IManyToOneInstance inst
上面的代码允许我在类型引用的情况下更改外键关系的命名约定。如何实现IHasManyConvention name和IHasManyToManyConvention的相同结果。IReferenceConvention的名称更改约定完美地展示了这一点,但我没有谈到其他类型的关系。对于
有许多
,我使用:
public class ReferenceConvention : IReferenceConvention{
public void Apply(IManyToOneInstance instance) {
instance.ForeignKey(string.Format("FK_{0}_{1}",
instance.EntityType.Name,
instance.Name));
}
//
///收集关系约束,例如文档论坛问题(1:m)
///
公共类有许多约定:IHasManyConvention
{
public void Apply(IOneToManyCollectionInstance实例)
{
instance.Key.ForeignKey(
字符串格式(
“[FK{1}.{0}Id引用{0}.Id{2}]”,
instance.EntityType.Name,
instance.Relationship.Class.Name,
实例。StringIdentifierModel);
}
}
很抱歉,在很多方面我帮不了你-我总是将这些表达为2 x 1 omany(一个具体的链接实体),这些都包含在上述内容中我一直在争论这是否是一个好的最佳实践。因为如果不从具体开始,然后决定向DDL中的链接表关系(又名)中添加一个代理基(或任何标量属性),那么必须重新编写大量内容…以在事后注入具体。很高兴知道有人看到了这一切。
/// <summary>
/// Collection relationship constraint e.g. DocumentForum.Questions (1:m)
/// </summary>
public class HasManyConvention : IHasManyConvention
{
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Key.ForeignKey(
string.Format(
"[FK {1}.{0}Id references {0}.Id {2}]",
instance.EntityType.Name,
instance.Relationship.Class.Name,
instance.StringIdentifierForModel));
}
}