6

我目前部署在使用 Entity Framework 4.3 进行数据库访问的 MVC 3 网站上。

该应用程序在 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
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

确保两台机器 (dev/prod) 上的 ASP.NET MVC 版本相同。其他人因此而遇到问题

基本上,生产服务器的 GAC 中有一个较新的版本。

于 2012-05-28T12:44:57.557 回答
0

两台服务器是否具有相同的区域设置?

您使用string.ToLover并且StartsWith将根据当前文化执行转换。

您应该将这些方法的重载版本与 Invariant 文化一起使用。

于 2012-06-04T04:03:19.140 回答
0

一个简单的解决方案是实现某种日志记录并将中间级别产生的输出写入日志文件。

如果您使用的是 VS 终极版,您可以使用IntelliTrace 试一试。(虽然我听说过这个工具,但我没有使用过)

于 2012-05-31T06:48:46.817 回答