gpt4 book ai didi

nhibernate - Fluent nHibernate, Hi-Lo 表,每行实体使用约定

转载 作者:行者123 更新时间:2023-12-04 01:47:47 26 4
gpt4 key购买 nike

有没有办法指定一个表用于 Hi-Lo 值,每个实体都有一个每行条目,通过约定(同时仍然让 nHibernate 为你创建表结构)?我想复制 Phil Haydon 在博客中写的内容 here ,但无需手动管理表。就目前而言,仅当您已经在表中为“TableKey”创建了适当的条目时,才能将他的 row-per-table 代码迁移到其自己的约定。

或者,这可以通过 XML 映射实现吗?

如果所有其他方法都失败了,这是使用自定义生成器的唯一其他合适选项,例如 this post ?

最佳答案

法比奥·毛洛 talked about this在他的一个按代码映射的帖子中。

按代码示例映射:

mapper.BeforeMapClass += (mi, type, map) =>
map.Id(idmap => idmap.Generator(Generators.HighLow,
gmap => gmap.Params(new
{
table = "NextHighValues",
column = "NextHigh",
max_lo = 100,
where = string.Format(
"EntityName = '{0}'", type.Name.ToLowerInvariant())
})));

对于 FluentNHibernate,您可以执行以下操作:
public class PrimaryKeyConvention : IIdConvention
{
public void Apply(IIdentityInstance instance)
{
var type = instance.EntityType.Name;
instance.Column(type + "Id");
instance.GeneratedBy.HiLo(type, "NextHigh", "100",
x => x.AddParam("where", String.Format("EntityName = '{0}'", type));
}
}

此外,Fabio 解释了如何使用 IAuxiliaryDatabaseObject创建 Hi-Lo 脚本。
private static IAuxiliaryDatabaseObject CreateHighLowScript(
IModelInspector inspector, IEnumerable<Type> entities)
{
var script = new StringBuilder(3072);
script.AppendLine("DELETE FROM NextHighValues;");
script.AppendLine(
"ALTER TABLE NextHighValues ADD EntityName VARCHAR(128) NOT NULL;");
script.AppendLine(
"CREATE NONCLUSTERED INDEX IdxNextHighValuesEntity ON NextHighValues "
+ "(EntityName ASC);");
script.AppendLine("GO");

foreach (var entity in entities.Where(x => inspector.IsRootEntity(x)))
{
script.AppendLine(string.Format(
"INSERT INTO [NextHighValues] (EntityName, NextHigh) VALUES ('{0}',1);",
entity.Name.ToLowerInvariant()));
}

return new SimpleAuxiliaryDatabaseObject(
script.ToString(), null, new HashedSet<string> {
typeof(MsSql2005Dialect).FullName, typeof(MsSql2008Dialect).FullName
});
}

你会像这样使用它:
configuration.AddAuxiliaryDatabaseObject(CreateHighLowScript(
modelInspector, Assembly.GetExecutingAssembly().GetExportedTypes()));

关于nhibernate - Fluent nHibernate, Hi-Lo 表,每行实体使用约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11402621/

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