【发布时间】:2010-11-13 20:49:43
【问题描述】:
我有一个如下所示的课程:
public class Job
{
public Company Company {get;set;}
public Job JobForCompanyA {get;set;}
public Job JobForCompanyB {get;set;}
}
两家公司的职位会互相引用,例如:
var jobA = new Job { Company = Company.CompanyA };
var jobB = new Job { Company = Company.CompabyB };
jobA.JobForCompanyB = jobB;
jobB.JobForCompanyA = jobA;
这样做的问题是,如果我在 NHibernate 中将它们映射为普通的多对一,它无法保存它们......因为每个 Job 对象都引用另一个,你必须保存一个才能获得 PK ,但你不能,因为它引用了另一个(未保存的)作业,所以你有一个先有鸡还是先有蛋的问题。
从数据库的角度来看,我可以制作一个映射表,将 A 公司的 Jobs 映射到 B 公司的 Jobs。有没有一种方法可以使用 NHibernate 进行映射,而无需更改实体对象的外观?我知道我可以像普通的多对多关系一样添加列表属性和技巧,但这必须是有人有更好解决方案的模式。
我正在使用 Fluent NHibernate,因此您可以为我提供使用 Fluent NHibernate 或 NHibernate XML 映射的解决方案。
【问题讨论】:
-
如果您有能力将身份更改为 NHibernate 可以为您完成的事情(hilo、guid.comb 等)。
-
我不知道这将如何解决问题。问题在于,按照现在数据库表的设置方式,表上的 FK 永远不会让一个 Job 在没有另一个 Job 的 Id 的情况下被保存(也没有保存)。所以我想我需要改变我的数据库架构。
-
忘记了数据库约束,抱歉。
标签: nhibernate fluent-nhibernate