6

現在、データベース アクセスに Entity Framework 4.3 を使用する MVC 3 Web サイトに展開しています。

アプリケーションは Visual Studio 開発サーバーでは期待どおりに動作しますが、リモート サーバーにデプロイされると、クエリが予期せず反応します。

そのソートされたデータを介してソートされたリストとページを表示する必要があります

Web サーバーと物理サーバー マシンを再起動してキャッシュがなくなったことを確認し、リモート サーバーでクリーンな IIS サイトを使用してみても同じ結果が得られました。

[編集]: 私も完全に削除し、クリーンなサイトに再公開しました

開発機について

開発機

リモート サーバー上

ここに画像の説明を入力

テーブルを生成するために使用しているコード:

コントローラ

    [HttpGet]
    public virtual ActionResult Index(string filter = "", int? page = null)
    {

        page = page ?? 1;
        filter = filter.Trim().ToLower();
        int pageSize = Properties.Settings.Default.DefaultSPPageSize;



        int skipNum = (page.Value - 1) * pageSize;

        IQueryable<SamplePoint> spList;
        var points = new HashSet<string>(Settings.Default.SamplePointFilter.Split(','));


        if (filter != "")
            spList = db.SamplePoints.Where(e=> 
                        points.Any(p=> e.Id.StartsWith(p))
                     && e.Id.ToLower().Trim().StartsWith(filter.ToLower()))
            .OrderBy(o => o.Id);

        else
            spList = db.SamplePoints.Where(e =>
                        points.Any(p => e.Id.StartsWith(p))
                     && e.Id.Trim().StartsWith(filter)).OrderBy(o => o.Id);


        List<SamplePoint> pageItems;
        if (page != 0)
        {
            pageItems = spList.Skip(skipNum).Take(pageSize).ToList();
        }
        else
        {
            pageItems = spList.OrderBy(o=> o.Id).ToList();
        }

        int _totPages = Convert.ToInt32(pageSize > 0 ? Math.Ceiling(((double)spList.Count() / (double)pageSize)) : 0);


        var vModel = new SamplePointListViewModel(pageItems, filter) { LocationList = FilterListItems, TotalPages = _totPages, CurrentPage = page.Value };

        return View(this.IsExcelRequest() ? MVC.Reports.Views.Excel.SamplePointList : MVC.Reports.Views.SamplePointList, vModel);
    }
4

4 に答える 4

0

ASP.NET MVCのバージョンが両方のマシン(dev / prod)で同じであることを確認してください。これが原因で他の人が問題を抱えました。

基本的に、新しいバージョンが本番サーバーのGACに組み込まれていることがありました。

于 2012-05-28T12:44:57.557 に答える
0
spList = db.SamplePoints.Where(e=> 
                        points.Any(p=> e.Id.StartsWith(p))
                     && e.Id.ToLower().Trim().StartsWith(filter.ToLower()))
            .OrderBy(o => o.Id);

上記のコードから、

e.IDは上の画像の最初の列ですか? そうでない場合、e.Idは主キーであり、IdentitySeed は true に設定されていますか? もしそうなら、これはあなたの問題です.これは自動生成されるため、このIDは本番データベースと開発データベースで異なり、表示が異なります.

于 2012-06-01T06:51:40.990 に答える
0

両方のサーバーの地域設定は同じですか?

string.ToLoverandを使用するとStartsWith、現在の文化に基づいて変換が実行されます。

Invariant カルチャでは、これらのメソッドのオーバーロードされたバージョンを使用する必要があります。

于 2012-06-04T04:03:19.140 に答える
0

簡単な解決策は、ある種のロギングを実装し、中間レベルで生成された出力をログ ファイルに書き込むことです。

VS アルティメット エディションを使用している場合は、IntelliTraceを使用して試してみることができます。(このツールについて聞いたことはありますが、使用したことはありません)

于 2012-05-31T06:48:46.817 に答える