gpt4 book ai didi

fluent-nhibernate - 我可以制定包含父键名称的 Fluent NHibernate 外键约定吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:12 27 4
gpt4 key购买 nike

我有一个数据库模式,其中外键名称的约定是:

ForeignTable.Name + ForeignTable.PrimaryKeyName

因此,对于一个 Child 表引用一个 Parent 表,该表的主键列名为 Key,外键看起来像 父键

有没有办法在我的 Fluent NHibernate 映射中创建此约定?

目前我正在使用这样的 ForeignKeyConvention 实现:

public class ForeignKeyNamingConvention : ForeignKeyConvention
{
protected override string GetKeyName(PropertyInfo property, Type type)
{
if (property == null)
{
// Relationship is many-to-many, one-to-many or join.
if (type == null)
throw new ArgumentNullException("type");

return type.Name + "ID";
}

// Relationship is many-to-one.
return property.Name + "ID";
}
}

对于所有以“ID”为主键的类型,这完全符合我的要求。我想要做的是用所引用类型的主键名称替换常量“ID”。

如果 Fluent NHibernate 目前无法做到这一点,我很乐意接受这个答案。

最佳答案

看看conventions尤其是在实现自定义外键约定方面。


更新:

这是一个例子。假设以下域:

public class Parent
{
public virtual int Id { get; set; }
}

public class Child
{
public virtual string Id { get; set; }
public virtual Parent Parent { get; set; }
}

需要映射到这个模式:

create table Child(
Id integer primary key,
ParentId integer
)

create table Parent(
Id integer primary key
)

你可以使用这个约定:

public class CustomForeignKeyConvention : IReferenceConvention
{
public void Apply(IManyToOneInstance instance)
{
instance.Column(instance.Class.Name + "Id");
}
}

并创建 session 工厂:

var sf = Fluently
.Configure()
.Database(
SQLiteConfiguration.Standard.UsingFile("data.db3").ShowSql()
)
.Mappings(
m => m.AutoMappings.Add(AutoMap
.AssemblyOf<Parent>()
.Where(t => t.Namespace == "Entities")
.Conventions.Add<CustomForeignKeyConvention>()
)
)
.BuildSessionFactory();

关于fluent-nhibernate - 我可以制定包含父键名称的 Fluent NHibernate 外键约定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14584885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com