我的目标是使用 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
andDescription
字段中。当我添加时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>
这种方式处理所有属性?