1

DevForce 2012 7.2.2、EF 5、Silverlight、C#、VS2012

type 的实体属性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;
    }
}

为了好玩,我还尝试更具体一些,以防工具在某个地方变得混乱(替换DayOfWeekSystem.DayOfWeek整个),但这产生了相同的结果。

我检查过的事情:

  • IKnownTypeProvider发现了吗?成功命中断点
  • 是否在 SL 和服务器端?是的,类定义文件在两个项目中。是的,它列在已知类型的集合中(由 提供var lstKnownTypes = IdeaBlade.EntityModel.KnownTypeHelper.GetServiceKnownTypes(null);

继承的代码,所以也许我忽略了一些东西,但我没有看到它。

添加 IKnownTypeProvider 之前保存更改时出错:

类型 'System.DayOfWeek' 与数据合同名称 DayOfWeek: http://schemas.datacontract.org/2005/07/system ' 不是预期的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 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。

4

1 回答 1

1

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

于 2014-05-20T00:24:56.803 回答