nhibernate - Fluent NHibernate 自动映射 : One-to-many entities, 多对多后端?

标签 nhibernate fluent-nhibernate database-schema hbm2ddl

我的目标是使用 NHibernate 模式生成以及 Fluent NHibernate 的自动映射器来生成我的数据库。我遇到了我称之为“单向多对多关系”的问题。

我的许多实体都有本地化资源。单个类可能如下所示:

public class Something {
  public virtual int Id {get; private set;}
  public virtual Resource Title {get;set;}
  public virtual Resource Description {get;set;}
  public virtual IList<Resource> Bullets {get;set;}
}

Resource类没有任何引用;这些完全是单向的。

public class Resource {
    public virtual int Id {get; private set;}
    public virtual IList<LocalizedResource> LocalizedResources {get;set;}
    // etc.
}
public class LocalizedResource { // 
    public virtual int Id {get; private set; }
    public virtual string CultureCode {get;set;}
    public virtual string Value {get;set;}
    public virtual Resource Resource {get;set;}
}

没有 IList<Resource> ,一切都按照我的意愿生成——资源 ID 在 Title 中和 Description领域。当我添加 IList不过,NHibernate 添加了字段 something_idResource table 。我理解为什么这样做,但在这种情况下,这不是一种可持续的方法。

我想要的是为项目符号创建一个联结表。像这样的东西:

CREATE TABLE SomethingBullet (
  Id int NOT NULL PRIMARY KEY IDENTITY(1,1),
  Something_Id int NOT NULL,
  Resource_Id int NOT NULL
)

这样,当我将其他 20 多个实体添加到数据库中时,我不会以宽得离谱且稀疏的 Resource 结束。表。

如何指示 Automapper 处理所有 IList<Resource>这样的属性?

最佳答案

在对象模型中,每个多对多实际上都是由一对多组成的。如果你的关系不需要是双向的,就不要映射第二方。映射侧的映射完全不受影响:

HasManyToMany(x => x.Bullets).AsSet();

在这种情况下,NHibernate 已经知道它需要生成中间表。

另请参阅这篇文章 many-to-many提示。

关于nhibernate - Fluent NHibernate 自动映射 : One-to-many entities, 多对多后端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236660/

相关文章:

nhibernate - 在更新 nhibernate 之前更改属性值

visual-studio - 为什么在运行我的应用程序时会遗漏一些引用?

mysql - 如何在MySQL数据库中实现 'Favorite'关系?

mysql - 如何为父用户建模

nhibernate - 使用 SchemaExport 时按名称对列进行排序

c# - 如何在 nhibernate 查询中添加 groupby?

c# - 自动刷新数据到数据库

c# - 在 Web API 应用程序中,我可以在什么时候拦截 URI 参数并相应地路由调用?

NHibernate 2.1.0.4000 似乎不喜欢批量插入

fluent-nhibernate - Fluent 1.2 从 NH 3.0 升级到 3.1 时出现警告 -- ProxyFactoryFactory is obsolete, moved to