DevForce 2012 7.2.2, EF 5, Silverlight, С#, VS2012
Entity свойство типа System.DayOfWeek
, ошибка (полное сообщение об ошибках ниже), которое необходимо добавить в список известных типов при попытке обновить/сохранить изменение этого свойства до другого значения. Кажется странным, учитывая, что он перечислим System, и он указан как конкретный пример, который можно использовать в документации DevForce (http://drc.ideablade.com/devforce-2012/bin/view/Documentation/enum-types)
Поэтому я создал IKnownTypeProvider
и добавил DayOfWeek
в качестве записи:
public class LwKnownTypeProvider : IKnownTypeProvider
{
public IEnumerable<Type> AddKnownTypes()
{
var list = new Type[]
{
typeof (DayOfWeek)
};
return list;
}
}
Для удовольствия я также старался быть более конкретным, если бы где-то инструменты путались (замените DayOfWeek
на System.DayOfWeek
), но это дало те же результаты.
Вещи, которые я проверил:
IKnownTypeProvider
ли IKnownTypeProvider
? Точки прерывания успешно ударяютсяvar lstKnownTypes = IdeaBlade.EntityModel.KnownTypeHelper.GetServiceKnownTypes(null);
)Наследуемый код, так что, возможно, я что-то пропускаю, но я этого не вижу.
Ошибка сохранения изменений до добавления IKnownTypeProvider:
Тип 'System.DayOfWeek' с именем контракта данных DayOfWeek: http://schemas.datacontract.org/2005/07/system 'не ожидается. Добавьте любые типы, не известные статически в список известных типов - например, с помощью KnownTypeAttribute или путем добавления их в список известных типов, переданных DataContractSerializer
Ошибка после добавления IKnownTypeProvider
перечисленных выше:
Formatter thew исключение при попытке десериализации сообщения: при попытке десериализации параметра ideablade.com/EntityModel:workState произошла ошибка. Сообщение InnerException было "Элемент" ideablade.com/EntityModel:OriginalValue "содержит данные от типа, который сопоставляется с именем" http://schemas.datacontract.org/2005/07/System:DayOfWeek ". Deserializer не знает ни одного типа, который сопоставляется с этим именем. Подумайте об использовании DataContractResolver или добавьте тип, соответствующий "DayOfWeek" в список известных типов, например, добавив атрибут KnownTypeAttribute или добавив его в список известных типов, поставленных DataContractSerializer. '. Дополнительную информацию см. В InnerException.
По-видимому, это ошибка в том, как обрабатываются типы перечислений во время обновления, когда эти измененные свойства являются частью исходных значений, переданных на сервер. Обходной путь в настоящее время заключается в реализации вашего IKnownTypeProvider как на клиенте, так и на сервере.