«Повторные» данные заполняются в Silverlight 4 Gridview при использовании NHibernate, Linq to NHibernate и Castle.Windsor - PullRequest
0 голосов
/ 22 декабря 2010

Проблема, с которой я сейчас сталкиваюсь, заключается в следующем:

У меня есть приложение Gridview в моем приложении Silverlight 4, и оно заполняется данными.Однако данные являются первой записью в коллекции объектов, которая возвращается из базы данных и повторяется 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;
    }

Код службы домена:

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

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


        return result;
    }

Инаконец, код DAL:

общедоступный IList GetWorkCellLoadGraphDataByIdA (string workCellId, DateTime startDate, DateTime endDate) {IList results = new List ();

        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;
    }

как новичок во всех технологияхупоминается в теме, я не уверен, в какой области может быть проблема.Я пытался установить точки останова, но с асинхронными вызовами не так просто следовать.

Кроме того, я должен добавить, что обычно я буду вызывать код DAL из моих классов POCO, а не полностью обходить POCO.

Кто-нибудь может помочь?

Дэвид

1 Ответ

0 голосов
/ 27 декабря 2010

Хорошо, после борьбы с этой проблемой некоторое время мы узнали, в чем проблема.Фактически, в нашей коллекции возвращаемые объекты выглядели примерно так:

  • "someID", Today, 1
  • "someID", Tomorrow, 1
  • "someID ", NextMonth, 1

и так далее.

Проблема была с «someID», так как я считаю, что Silverlight ожидает чего-то уникального.Поэтому, если вместо этого мы передадим данные как

  • "someID", сегодня, 1
  • "someID1", завтра, 1
  • "someID2", NextMonth1

будут возвращены «правильные» данные.

Я действительно надеюсь, что это кому-то поможет, потому что мы потратили много времени на это.

...