【发布时间】:2013-01-30 08:02:24
【问题描述】:
当应用程序加载时,我将所有广告系列都加载到内存中:
var all = session.Query<Campaign>().ToList();
广告系列只有一项服务。
public CampaignMap()
{
Table("`TR_Campaigns`");
Schema("dbo");
Not.LazyLoad();
Id(x => .Id).GeneratedBy.Increment().Column("CampaignID");
References(x => x.Service).Column("ServiceID").Not.LazyLoad();
// I also tried hasone and it is bringing the same result
}
这是服务地图:
public ServiceMap()
{
Not.LazyLoad();
Table("`TR_Services`");
Id(x => x.Id, "ServiceID").GeneratedBy.Increment();
Map(x => x.Name,"ServiceName");
}
问题是,当我有 100 个广告系列,并且每个广告系列都有不同的服务时,映射会生成 100 个查询来获取每个广告系列的服务。
例如,如果 ServiceID 2 在多个活动中重复出现,则查询 … WHERE service0_.ServiceID = 2 将只运行一次(这很好)。
这是生成的查询:
SELECT service0_.ServiceID as ServiceID4_0_,
service0_.ServiceName as ServiceN2_4_0_
FROM [TR_Services] service0_
WHERE service0_.ServiceID = 8
这正常吗?当我有 1000 个活动和 1000 项服务甚至更多时,我会怎么做……
谢谢
更新:
我看到了您的编辑,我认为这是有效的。
但是CampaignMap的关系比较多,例如:
HasMany(x => x.LandingPageWeights).KeyColumn("CampaignID").Not.LazyLoad();
根据您的查询,我该如何处理?
执行 LandingPageWeights = x.LandingPageWeights 失败....
您对此有何建议?
谢谢
【问题讨论】:
标签: nhibernate one-to-one