gpt4 book ai didi

nhibernate - Fluent Nhibernate ClassMaps 和列顺序

转载 作者:行者123 更新时间:2023-12-04 23:31:56 30 4
gpt4 key购买 nike

我们的实体有一组共同的属性。为了减少重复映射,我创建了一个映射身份和公共(public)属性的基本 ClassMap。对于每个实体的 ClassMap,我只是将基础子类化,它工作得很好。对于一个新项目,我们还让 NH 为我们生成数据库模式。问题是,列的顺序是基类映射中的属性首先出现,然后是子类中映射的任何内容。此构建的要求是列以特定顺序出现。

为了解决这个问题,我做了以下事情。

public class BaseMap<T> : ClassMap<T> where T : Entity
{
public BaseMap()
{
Id(x => x.Id);
MapEntity();
Map(x => x.CommonProperty1);
Map(x => x.CommonProperty2);
Map(x => x.CommonProperty3);
}

protected virtual void MapEntity()
{
}
}

public class SomeEntityMap : BaseMap<SomeEntity>
{
public SomeEntity()
{
base.MapEntity();
}

protected override void MapEntity()
{
Map(x => x.SomeEntityProperty1);
Map(x => x.SomeEntityProperty2);
Map(x => x.SomeEntityProperty3);
}
}

这行得通,但感觉就像一个黑客。除了黑客因素之外,这里还有什么可能有问题的吗?

最佳答案

如果您将基类和 map 方法抽象化,它会感觉不那么 hacky...

public abstract class BaseMap<T> : ClassMap<T> where T : Entity
{
public BaseMap()
{
Id(x => x.Id);
MapEntity();
Map(x => x.CommonProperty1);
Map(x => x.CommonProperty2);
Map(x => x.CommonProperty3);
}

protected abstract void MapEntity();

}

public class SomeEntityMap : BaseMap<SomeEntity>
{
protected override void MapEntity()
{
Map(x => x.SomeEntityProperty1);
Map(x => x.SomeEntityProperty2);
Map(x => x.SomeEntityProperty3);
}
}

这会将公共(public)属性列保留在表的末尾。请注意,在这些之后仍会添加外键列。我认为没有任何方法可以完全控制流利的列顺序,除非您手动修改创建模式脚本。

关于nhibernate - Fluent Nhibernate ClassMaps 和列顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3735745/

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