2番目のコンテキストのIDを比較して、ターゲットコンテキストで作成されるエンティティのセットを作成しようとしています。
これは私が思いついたものですが、私はより良い方法を探しているか、これが正しい方法であることを確認しています。
これまでに指摘した主なポイントは次のとおりです。
- クエリが複数のコンテキストを使用するときにエラーが発生しないようにするには、ToList()が必要です
生成されたSQLにIN句を強制すると、処理できる数に上限があり、そのエラー条件が迫ってほしくないことを私は知っています。
public override IEnumerable<Campaign> Execute() { using (var eom = eomDatabase.Create()) using (var cake = cakeEntities.Create()) { var campaigns = eom.Campaigns.Select(c => c.pid).ToList(); var offers = cake.CakeOffers.Select(c => c.Offer_Id).ToList(); var newOffers = offers.Except(campaigns).ToList(); var newCampaigns = from offer in cake.CakeOffers where newOffers.Contains(offer.Offer_Id) select new Campaign { pid = offer.Offer_Id, campaign_name = offer.OfferName }; return newCampaigns.ToList(); } }
更新:どうやらステートメントが私が思ったように機能しないようにします-私の元のコードがマルチコンテキストエラーを引き起こす間、上記はエラーを生成しません。
var newCampaigns = from offer in cake.CakeOffers
let campaigns = eom.Campaigns.Select(c => c.pid).ToList()
let offers = cake.CakeOffers.Select(c => c.Offer_Id).ToList()
let newOffers = offers.Except(campaigns).ToList()
where newOffers.Contains(offer.Offer_Id)
select new Campaign {
pid = offer.Offer_Id,
campaign_name = offer.OfferName
};