hey*_*uss 5 nhibernate fluent-nhibernate
有没有办法指定一个用于Hi-Lo值的表,每个实体都有一个每行条目,通过约定(虽然仍然有nHibernate为你创建表结构)?我想复制Phil Haydon在这里写的内容,但无需手动管理表格.就目前而言,只有当您已经在表中为"TableKey"创建了适当的条目时,才将其每行代码行迁移到它自己的约定.
或者,这可以通过XML映射吗?
如果一切都失败了,是使用自定义的生成,一拉唯一的其他选择相应的选项这篇文章?
Fabio Maulo 在他的一个代码映射帖子中谈到了这一点.
按代码示例映射:
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())
})));
Run Code Online (Sandbox Code Playgroud)
对于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));
}
}
Run Code Online (Sandbox Code Playgroud)
此外,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
});
}
Run Code Online (Sandbox Code Playgroud)
你会像这样使用它:
configuration.AddAuxiliaryDatabaseObject(CreateHighLowScript(
modelInspector, Assembly.GetExecutingAssembly().GetExportedTypes()));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2876 次 |
最近记录: |