У меня есть C# приложение WPF, где я отслеживаю сущности, доставленные через OData API.
В моем обычном коде я бы сделал
var files = new DataServiceCollection<File>(ctx.Files);
, где ctx
Экземпляр класса ODataService
, который наследуется от DataServiceContext
и ctx.Files
, имеет тип DataServiceQuery<File>
. Это позволяет мне отслеживать и манипулировать коллекцией File
объектов на сервере.
Однако у меня есть класс MyFile
, который наследует File
:
public class MyFile : File {
...
}
Что я очень бы хотелось отследить все File
объекты как MyFile
объекты. Так как я не могу уменьшить File
до MyFile
, вместо этого я попытался сделать следующее:
var files = new DataServiceCollection<MyFile>(ctx.Files.Cast<MyFile>());
Это даст мне коллекцию того типа, который я хочу. Однако, когда я изменяю объект, например files[0]
и пытаюсь сохранить изменения на сервере, используя ctx.SaveChanges()
, я получаю исключение, утверждающее, что свойство типа MyFile
(которого нет в File
) не существует для типа 'Файл'. Кроме того, ошибка гласит: «Убедитесь, что используются только имена свойств, которые определены типом».
Есть идеи о том, как правильно использовать производные классы в контексте OData?