&引用;“重复”;使用NHibernate、Linq to NHibernate和Castle.Windsor时,数据填充到Silverlight 4 Gridview中

&引用;“重复”;使用NHibernate、Linq to NHibernate和Castle.Windsor时,数据填充到Silverlight 4 Gridview中,nhibernate,silverlight-4.0,castle-windsor,linq-to-nhibernate,Nhibernate,Silverlight 4.0,Castle Windsor,Linq To Nhibernate,我目前面临的问题如下: 我的Silverlight 4应用程序中有一个Gridview,其中填充了数据。但是,数据是从数据库带回的对象集合中的第一个条目,并在网格视图中重复x次 当我在DAL和域服务上设置断点时,返回的数据是正确的,即它返回集合中所有不同的对象 如果我将数据绑定到非Silverlight组件,那么这不是一个问题 对于一些代码,下面是我如何在Silverlight应用程序中绑定数据: private void BindData() { _ctx = new

我目前面临的问题如下:

我的Silverlight 4应用程序中有一个Gridview,其中填充了数据。但是,数据是从数据库带回的对象集合中的第一个条目,并在网格视图中重复x次

当我在DAL和域服务上设置断点时,返回的数据是正确的,即它返回集合中所有不同的对象

如果我将数据绑定到非Silverlight组件,那么这不是一个问题

对于一些代码,下面是我如何在Silverlight应用程序中绑定数据:

 private void BindData()
    {
        _ctx = new ManufacturingDomainContext();

         _loadOp = _ctx.Load( _ctx.GetWorkCellLoadGraphDataByIdQuery( "Test", DateTime.Today, DateTime.Today.AddDays( 14 ) ), TestCallBack, null );
    }

    private void TestCallBack(LoadOperation<WorkCellLoadGraphData> obj)
    {
        CustomerGrid.ItemsSource = _loadOp.Entities;
    }
private void BindData()
{
_ctx=新的ManufacturingDomainContext();
_loadOp=_ctx.Load(_ctx.GetWorkCellLoadGraphDataByIdQuery(“Test”,DateTime.Today,DateTime.Today.AddDays(14)),TestCallBack,null);
}
私有void TestCallBack(加载操作obj)
{
CustomerGrid.ItemsSource=\u loadOp.Entities;
}
域服务代码为:

 public IEnumerable<WorkCellLoadGraphData> GetWorkCellLoadGraphDataById(string workCellId, DateTime startDate, DateTime endDate)
    {
        WorkCellLoadGraphData data = new WorkCellLoadGraphData();

        var result = ManufacturingDao.Instance.GetWorkCellLoadGraphDataByIdA(workCellId, startDate, endDate);


        return result;
    }
public IEnumerable GetWorkCellLoadGraphDataById(字符串workCellId、DateTime startDate、DateTime endDate)
{
WorkCellLoadGraphData=新WorkCellLoadGraphData();
var result=ManufacturingDao.Instance.GetWorkCellLoadGraphDataByIdA(workCellId、startDate、endDate);
返回结果;
}
最后,DAL代码是:

公共IList GetWorkCellLoadGraphDataByIdA(字符串workCellId、DateTime startDate、DateTime endDate) { IList results=新列表()

使用(var session=this.GetSession())
{
var-criteria=session.CreateCriteria(typeof(WorkCellLoadGraphData));
标准.SetProjection(
投影。投影列表()
.Add(Projections.Property(WorkCellLoadGraphData.WorkCellIdPropertyName),“WorkCellId”)
.Add(Projections.Property(WorkCellLoadGraphData.FromTimePropertyName),“FromTime”)
.Add(Projections.Property(WorkCellLoadGraphData.DurationPropertyName),“DurationInMinutes”)
);
条件.Add(限制.InsensitiveLike(WorkCellLoadGraphData.WorkCellIdPropertyName,workCellId));
添加(限制.Between(WorkCellLoadGraphData.FromTimePropertyName、startDate、endDate));
标准.SetResultTransformer(新别名为BeanResultTransformer(类型为(WorkCellLoadGraphData)));
结果=标准。列表();
}
foreach(结果中的var x)
Logger.Info(x.ToString());
返回结果;
}
作为一个初学者,我不确定哪一个领域会成为问题所在。我尝试过设置断点,但对于异步调用,事情并不是那个么容易做到

另外,我必须补充一点,通常,我会从我的POCO类调用DAL代码,而不是完全绕过POCO

有人能帮忙吗


David

好的,经过一段时间的努力,我们发现了问题所在。实际上,在我们返回的对象集合中,如下所示:

  • “someID”,今天,1
  • “某某”,明天,1
  • “someID”,下个月,1
等等

问题在于“someID”,因为我相信Silverlight期待着一些独特的东西。因此,如果我们将数据作为

  • “someID”,今天,1
  • “某某”,明天,1
  • “someID2”,下个月,1
将返回“正确”的数据

我真的希望这能帮助一些人,因为我们在这上面浪费了很多时间

        using (var session = this.GetSession())
        {

            var criteria = session.CreateCriteria(typeof(WorkCellLoadGraphData));

            criteria.SetProjection(
                Projections.ProjectionList()
                    .Add(Projections.Property(WorkCellLoadGraphData.WorkCellIdPropertyName), "WorkCellId")

                    .Add(Projections.Property(WorkCellLoadGraphData.FromTimePropertyName), "FromTime")
                    .Add(Projections.Property(WorkCellLoadGraphData.DurationPropertyName), "DurationInMinutes")

                );

            criteria.Add(Restrictions.InsensitiveLike(WorkCellLoadGraphData.WorkCellIdPropertyName, workCellId));
            criteria.Add(Restrictions.Between(WorkCellLoadGraphData.FromTimePropertyName, startDate, endDate));

            criteria.SetResultTransformer(new AliasToBeanResultTransformer(typeof(WorkCellLoadGraphData)));

            results = criteria.List<WorkCellLoadGraphData>();
        }

        foreach (var x in results)
            Logger.Info(x.ToString());

        return results;
    }