System.DayOfWeek枚举 - 使用KnownType问题保存时的实体错误; DevForce 2012

时间:2014-05-19 15:27:40

标签: c# dayofweek devforce known-types

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?断点成功被击中
  • 是否同时出现在SL&amp;服务器端?是的,类定义文件在两个项目中。是的,它列在已知类型的集合中(由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   更多细节。

1 个答案:

答案 0 :(得分:1)

这似乎是在更新期间如何处理枚举类型的错误,当这些更改的属性是传递给服务器的原始值的一部分时。目前的解决方法是在 客户端和服务器上实现IKnownTypeProvider。