Я только начал изучать, как использовать Entity Framework для написания очень простой программы мониторинга сети на C # - это учебное упражнение, чтобы попытаться «добраться домой» до того, что я только что прочитал на сегодняшний день. Я также новичок в C # и LINQ (просто чтобы усложнить ситуацию.)
Я считаю, что модель данных надлежащим образом нормализована, но я могу ошибаться. Visual Studio создает концептуальную модель, которая выглядит хорошо. Я привел во множественное число ассоциации и EntitySet, где это необходимо, но я изо всех сил стараюсь выполнить то, что я считаю довольно простым запросом / проекцией данных.
База данных содержит 3 таблицы:
[Server] - A server defined by the user that should be pinged.
ServerID - primary key
HostAddress - IP or hostname
[Result] - A result containing data about the last server test
ResultID - primary key
ServerID - foreign key on [Server].[ServerID]
StateID - an integer used to lookup one of 3 possible Server states
TimeStamp - Time stamp of last ping
[State] - A lookup table containing an integer -> string mapping.
StateID - a unique key
StateLabel - human-readable string like "unreachable" or "OK" or "timeout"
Я вручную заполнил базу данных, используя несколько простых записей - достаточно, чтобы мне было с чем работать.
Для начала я хотел бы представить все данные Result в ListView на WinForm. ListView содержит следующие статические столбцы:
Штат | Адрес сервера | Последняя проверка
Теоретически, данные ListView должны генерироваться путем проецирования (?) На каждую из 3 таблиц:
- В столбце «Состояние» должен отображаться читабельный [State]. [StateLabel], связанный с [Result]. [StateID]
- В столбце «Адрес сервера» должен отображаться [Server]. [HostAddress], связанный с [Result]. [ServerID]
- В столбце «Последняя проверка» должен отображаться [Результат]. [TimeStamp]
Поскольку мне не нужны функции материализации объектов и / или отслеживания изменений ObjectServices, правильно ли я считаю, что было бы более эффективно / правильно использовать Entity SQL / EntityClient и DbDataReader? Если да, то как будет выглядеть подходящий запрос Entity SQL?
Для чего бы то ни было, я пытался использовать LINQ to Entities и анонимные типы в методе, но был расстроен отсутствием понимания подходящего возвращаемого типа:
var results = from r in _context.Result
select new
{
State = (from s in _context.State
where s.StateId == r.StateId
select s.StateLabel),
r.ServerReference.Value.HostAddress,
r.TimeStamp
};
return results.ToList(); // <- No can do.
Спасибо за вашу помощь!
Steve