【发布时间】:2012-03-03 10:42:54
【问题描述】:
我的目标是使用 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_id 添加到 Resource 表中。我理解它为什么这样做,但在这种情况下,这不是一种可持续的方法。
我想要的是为子弹创建一个连接表。比如:
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> 属性?
【问题讨论】:
标签: nhibernate fluent-nhibernate database-schema hbm2ddl