1

私は次のアクションメソッドを持っています:-

public ActionResult Index(string searchTerm=null, int page = 1)
        {
            var racks = repository.AllFindRacks(searchTerm).OrderBy(a=>a.Technology.Tag).ToPagedList(page, 5) ;

            if (Request.IsAjaxRequest())
            {

                return PartialView("_RackTable", racks);
            }
            return View(racks);
        }

そして、次のリポジトリメソッド:-

public IQueryable<RackJoin> AllFindRacks(string q)
        {
            List<RackJoin> rakjoin = new List<RackJoin>();
            var result = from rack in tms.TMSRacks
           .Include(rack => rack.DataCenter)
           .Include(rack => rack.Zone)
           .Include(rack => rack.TMSFirewalls)
           .Include(rack => rack.TMsRouters)
           .Include(rack => rack.TMSServers)
           .Include(rack => rack.TMSStorageDevices)
           .Include(rack => rack.TMSSwitches)
           .Include(rack => rack.Technology)
                         join resource in entities.Resources
                         .Include(a => a.ComponentDefinition)
                           .Include(a => a.ResourceLocation.SiteDefinition.SDOrganization)
                           .Include(a => a.ResourceLocation.SiteDefinition.AccountDefinition.SDOrganization)
                         on rack.Technology.IT360ID equals resource.RESOURCEID
                         where (q == null || rack.Technology.Tag.ToUpper().StartsWith(q.ToUpper()))
                         select new RackJoin { 
                         Rack = rack,
                         Resource = resource,
                         Customer = resource.ResourceLocation.SiteDefinition.AccountDefinition.SDOrganization,
                         Site = resource.ResourceLocation.SiteDefinition.AccountDefinition.SDOrganization,
                         Technology = rack.Technology

                         };
            return result;

        }

しかし、アクションメソッドを呼び出すと、次の例外が発生します:-

System.NotSupportedException はユーザー コードによって処理されませんでした
。HResult=-2146233067 Message=指定された LINQ 式には、異なるコンテキストに関連付けられているクエリへの参照が含まれています。
ソース = System.Data.Entity スタック トレース:

4

1 に答える 1

8

tms とエンティティの 2 つの異なるコンテキストからデータを結合しているようです。

どちらもデータベースへの独自の接続と完全に別のモデルを持っているため、これは LINQ では不可能です。

EF がこれを SQL ステートメントに変換することはできません。(わかっている限りでは、テーブルは別のデータベースに存在する可能性があります)

すべてのエンティティを単一のコンテキストに移動するか、両方のクエリを個別に実行してからメモリに結合する必要があります。(すべてのテーブルが同じ DB にある場合は最初のオプションを使用し、別のデータベースがある場合は 2 番目のオプションを使用します)

于 2013-08-09T08:48:11.840 に答える