Создать собственный отчет с Entity Framework ИЛИ Enterprise Library? - PullRequest
0 голосов
/ 17 октября 2011

Я разработал систему для клиента с использованием ASP.Net MVC 3 и Entity Framework 4. Система представляет собой небольшое приложение, которое позволяет клиенту записывать и контролировать свое оборудование, т. Е. Он может добавить часть оборудования, такую ​​как ПК (запишите номер актива, цену, срок действия гарантии и т. Д.), Назначьте его категории (например, система ПК, принтер, динамик и т. Д.), А также запишите местоположение оборудования (т. Е. Главный офис, склад, 2-е здание). Все это прекрасно работает, однако, недавно клиент запросил, чтобы некоторые отчеты были встроены в систему.

Некоторые отчеты просты в выполнении, т. Е. Выполняют поиск по номеру актива оборудования, а затем возвращают всю дополнительную информацию, связанную с этим. Тем не менее, есть один отчет, который ему нужен, это перечислить все местоположения в верхней части отчета, а затем все категории в левой части отчета, как таблицу / таблицу поиска. Затем будет показано общее количество категорий оборудования в каждом месте, например, общее количество систем ПК во 2-м корпусе, общее количество динамиков в кладовой и т. Д.

Я думал, хотя могу ошибаться, что это не то, для чего была разработана Entity Framework, т.е. возвращать объекты, а не наборы данных, отображающие вычисления. Поэтому мне было интересно, как лучше всего это сделать?

Я думал о возможном использовании Microsoft Enterprise Library и хранимых процедур, чтобы просто вернуть набор данных результатов, однако, может быть, это неправильный подход?

Опять же, любая обратная связь будет принята с благодарностью, и я прошу прощения, если мой запрос немного сбивает с толку.

Спасибо.

Ответы [ 2 ]

1 голос
/ 18 октября 2011

То, что хочет показать ваш клиент, называется сводная таблица .Взгляните на ответ здесь: Сводная таблица в каркасе сущностей c # .

Но если у вас есть следующие сущности

public class Location {
   public int LocationId { get; set; } // PK
}
public class Equipment {
   public int EquipmentId { get; set; } // PK
}
public class EquipmentAtLocation {
   public int LocationId { get; set; } // PK/FK
   public int EquipmentId { get; set; } // PK/FK
   public int Quantity { get; set; }
}

, то создание этой таблицы - ничто иноечем итерация по таблице m: n EquipmentAtLocation и запись Quantity в ячейку, заданную LocationId и EquipmentId.Если у вас нет этого PK в этой таблице, вам нужно сначала выполнить группировку по LocationId и EquipmentId для этой таблицы.

var locations = ctx.Locations.Select((val, idx) => new { val.LocationId, idx }).ToDictionary(x => x.LocationId, y => y.idx); // get a map of location to index
var equipments = ctx.Equipments.Select((val, idx) => new { val.EquipmentId, idx }).ToDictionary(x => x.EquipmentId, y => y.idx); // get a map of equipment to index

int[,] pivot = new int[locations.Count, equipments.Count];
foreach (var entry in ctx.EquipmentAtLocations) {
  pivot[locations[entry.LocationId], equipments[entry.EquipmentId]] += entry.Quantity;
}

Я не знаю, способен ли сериализатор контракта данныхсериализовать многомерные массивы, в противном случае вы должны использовать зубчатый массив.Вы, конечно, должны упаковать это в объект, а также включить информацию заголовка (ключи в словаре, упорядоченные по значению), чтобы вы знали, какой индекс означает, что.

1 голос
/ 18 октября 2011

Поскольку вы пометили это как MVC 3 - вы ищете веб-интерфейс для них, чтобы выбрать категорию, и результаты отображаются?Если так, то, конечно, вы можете использовать Entity Framework.Просто используйте Ajax-запрос к методу контроллера, чтобы затем вернуть ваше представление с этими данными в нем.

Никакой процедуры не требуется - вы можете сделать все это в рамках сущности.Ваша левая сторона - это Entity A. Когда вы нажимаете на один, он делает ajax-запрос к / Category / Index / 5, например, который просто отображает эти результаты.

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