Fluent NHibernate AutoMapping 中的自定义命名约定

发布于 2024-08-02 04:52:31 字数 1153 浏览 8 评论 0原文

根据此 Post 可以将命名约定从“[TableName]_id”更改为“[TableName]ID”。然而,当我看到代码时,我无法使用相当新的(大约 6 周前)版本的 Fluent NHibernate 来完成此操作。

原始代码:

var cfg = new Configuration().Configure();
var persistenceModel = new PersistenceModel();
persistenceModel.addMappingsFromAssembly(Assembly.Load("Examinetics.NHibernate.Data"));
persistenceModel.Conventions.GetForeignKeyNameOfParent = type => type.Name + "ID";
persistenceModel.Configure(cfg);
factory = cfg.BuildSessionFactory();

我想出了这个:

PersistenceModel model = new PersistenceModel();
model.AddMappingsFromAssembly(assemblyType.Assembly);
model.ConventionFinder.Add(
    ConventionBuilder.Reference.Always(part
        => part.ColumnName(part.EntityType.Name + part.Property.Name)));

configuration.ExposeConfiguration(model.Configure);
return configuration.BuildConfiguration();

但这给了我原始表,因为 EntityType 不是引用的实体,并且我没有看到任何属性来获取“父”实体。

我怎样才能做到这一点?

according to this Post it is possible to change the naming convention from "[TableName]_id" to "[TableName]ID". However when I saw the code, I wasn't able to do it with my rather new (about 6 weeks old) version of Fluent NHibernate.

Original code:

var cfg = new Configuration().Configure();
var persistenceModel = new PersistenceModel();
persistenceModel.addMappingsFromAssembly(Assembly.Load("Examinetics.NHibernate.Data"));
persistenceModel.Conventions.GetForeignKeyNameOfParent = type => type.Name + "ID";
persistenceModel.Configure(cfg);
factory = cfg.BuildSessionFactory();

I came up with this:

PersistenceModel model = new PersistenceModel();
model.AddMappingsFromAssembly(assemblyType.Assembly);
model.ConventionFinder.Add(
    ConventionBuilder.Reference.Always(part
        => part.ColumnName(part.EntityType.Name + part.Property.Name)));

configuration.ExposeConfiguration(model.Configure);
return configuration.BuildConfiguration();

but this gives me the original Table, because EntityType is not the referenced Entity and I see no property to get the "parent" entity.

How can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请参阅有关使用 Fluent NHibernate Automapping 约定删除 Id 中下划线的答案。

文本的一部分、表格和类是在链接中。

解决方案:

添加一个约定,它可以是系统范围的,也可以是更受限制的。

ForeignKey.EndsWith("Id")

代码示例

var cfg = new StoreConfiguration();
var sessionFactory = Fluently.Configure()
  .Database(/* database config */)
  .Mappings(m =>
    m.AutoMappings.Add(
      AutoMap.AssemblyOf<Product>(cfg)
          .Conventions.Setup(c =>
              {
                  c.Add(ForeignKey.EndsWith("Id"));
              }
    )
  .BuildSessionFactory();

现在,它将自动将 ShelfId 列映射到 Product 中的 Shelf 属性。


See The answer about removing underscores in Ids using Fluent NHibernate Automapping conventions here.

A portion of the text, the tables and classes are in the link.

Solution:

Add a convention, it can be system wide, or more restricted.

ForeignKey.EndsWith("Id")

Code example:

var cfg = new StoreConfiguration();
var sessionFactory = Fluently.Configure()
  .Database(/* database config */)
  .Mappings(m =>
    m.AutoMappings.Add(
      AutoMap.AssemblyOf<Product>(cfg)
          .Conventions.Setup(c =>
              {
                  c.Add(ForeignKey.EndsWith("Id"));
              }
    )
  .BuildSessionFactory();

Now it will automap the ShelfId column to the Shelf property in Product.


~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文