我有一个名为" TableA"的表。在这个表中有两列(外键)称为" ColA"和" ColB"。我想创建两个索引。一个用于ColA和ColB,另一个用于ColB。 在SQL中,这可以通过以下方式完成:
CREATE NONCLUSTERED INDEX [IX_TableA_ColA_ColB] ON TableA
(
ColA ASC,
ColB ASC
)
CREATE NONCLUSTERED INDEX [IX_TableA_ColB] ON TableA
(
ColB ASC
)
在Fluent nHibernate中为两列创建一个索引,我这样做:
TableA - 属于AutoMapping
ColA / ColBExpression - 类型为Expression<Func<T, TRef>>
TableA.References(ColAExpression).Index(indexName);
TableA.References(ColBExpression).Index(indexName);
现在,如果我尝试为ColB设置另一个索引,我会尝试这样做:
TableA.References(ColBExpression).Index(otherIndexName);
问题是索引被覆盖而不是加入,我得到这样的映射:
<many-to-one class="ColB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" foreign-key="Fk_TableA_TableB_ColB" name="ColB">
<column name="ColBId" index="IX_TableA_ColB" />
</many-to-one>
有没有办法使用Fluent nHibernate创建如下的映射?
<many-to-one class="ColB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" foreign-key="Fk_TableA_TableB_ColB" name="ColB">
<column name="ColBId" index="IX_TableA_ColB, IX_TableA_ColA_ColB" />
</many-to-one>
答案 0 :(得分:0)
我使用df[df['val']!=''].groupby('g').val.count().median()
的衍生物
AbstractAuxiliaryDatabaseObject
...然后将它们连接到我的public class SetIdDefaultsAuxiliaryDatabaseObject : AbstractAuxiliaryDatabaseObject
{
public override string SqlCreateString(
Dialect dialect,
IMapping p,
string defaultCatalog,
string defaultSchema)
{
return
$"ALTER TABLE {nameof(Customer)} ADD DEFAULT NEXT VALUE FOR SQ_{nameof(Customer)} FOR {nameof(Customer)}Id;"
}
public override string SqlDropString(
Dialect dialect,
string defaultCatalog,
string defaultSchema)
{
return string.Empty;
}
}
创建:
SessionFactory
您可以通过Fluently
.Configure(Config)
.Mappings(
m =>
m.FluentMappings
.AddFromAssemblyOf<CustomerMap>()
.Conventions.Add(PrimaryKey.Name.Is(x => "Id"), DefaultLazy.Always(), ForeignKey.EndsWith("Id"))
.Conventions.Add(new ForeignKeyConvention()))
.ExposeConfiguration(
config =>
{
Assembly
.GetExecutingAssembly()
.GetTypes()
.Where(t => typeof(AbstractAuxiliaryDatabaseObject).IsAssignableFrom(t))
.ForEach(t => config.AddAuxiliaryDatabaseObject(Activator.CreateInstance(t) as IAuxiliaryDatabaseObject));
})
.BuildSessionFactory();
添加额外的索引。