DevForce 2012 7.2.2,EF 5,Silverlight,C#,VS2012
类型System.DayOfWeek
的实体属性,在尝试将此属性的更改更新/保存到其他值时,需要将其添加到已知类型列表中时出错(下面的完整错误消息)。
看起来奇怪,考虑到它是一个系统可枚举,并且它被列为可以在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
?断点成功被击中var lstKnownTypes = IdeaBlade.EntityModel.KnownTypeHelper.GetServiceKnownTypes(null);
提供)继承的代码,所以也许我忽略了一些东西,但我没有看到它。
在添加IKnownTypeProvider之前保存更改时出错:
输入数据合约名称为DayOfWeek的'System.DayOfWeek':http://schemas.datacontract.org/2005/07/system'不是 预期。将任何静态未知的类型添加到已知列表中 types - 例如,通过使用KnownTypeAttribute或添加它们 到传递给DataContractSerializer的已知类型列表
添加上面列出的IKnownTypeProvider
后出错:
格式化程序在尝试反序列化时遇到异常 消息:尝试反序列化参数时出错 ideablade.com/EntityModel:workState。 InnerException消息是 'Element'ideablade.com/EntityModel:OriginalValue'包含来自的数据 映射到名称的类型 'http://schemas.datacontract.org/2005/07/System:DayOfWeek'。该 反序列化器不知道映射到此名称的任何类型。 考虑使用DataContractResolver或添加对应的类型 'DayOfWeek'到已知类型列表 - 例如,通过添加 KnownTypeAttribute属性或通过将其添加到已知列表中 类型为DataContractSerializer。'。请参阅InnerException 更多细节。
答案 0 :(得分:1)
这似乎是在更新期间如何处理枚举类型的错误,当这些更改的属性是传递给服务器的原始值的一部分时。目前的解决方法是在 客户端和服务器上实现IKnownTypeProvider。