【问题标题】:POCO entity-based RIA service can't de-serialize associated entitiesPOCO 基于实体的 RIA 服务无法反序列化关联实体
【发布时间】:2011-02-01 12:49:56
【问题描述】:

我正在使用 RIA 服务开发 Silverlight 业务应用程序,该服务返回 POCO 实体(TaskTime 和 User)。 TaskTime 实体有一个与之关联的 User 实体。

我创建了一个域服务,它有一个查询函数 (GetTimesheet),它返回 TaskTime 实体的 IQueryable 集合,如果我不尝试获取关联的用户实体,它工作正常,但只要我包括'TaskTime' 实体中 'User' 属性上方的 [Include] 和 [Association] 属性我开始收到反序列化错误消息:

格式化程序在尝试反序列化消息时抛出异常 [...] InnerException 消息是“第 1 行位置 266 中的错误。元素”http://schemas.microsoft.com/2003/10/ Serilaization/Arrays:anyType' 包含 'http://schemas.datacontract.org/2004/07/Timesheets.Entities:User' 数据合约的数据。反序列化器不知道映射到该合约的任何类型。将相应的“用户”添加到已知类型列表中...'

它建议我使用“KnownTypes”属性,但我似乎找不到放置解决此错误的地方。

有没有人知道如何解决这个问题?我可以在 Silverlight 应用程序的“Generated_Code”中看到这两种类型似乎都已正确创建,并添加了 DataContract 属性等。

我的 POCO 实体的简化版本是:

public partial class TaskTime
{
    [Key()]
    public virtual int ID   { get; set; }

    public virtual int User_ID  { get; set; }

    [Include]
    [Association("TaskTime_User", "User_ID", "ID", IsForeignKey=true)]
    public virtual User User
    {
        get { return _user; }
        set
        {
            if (!ReferenceEquals(_user, value))
            {
                var previousValue = _user;
                _user = value;
                FixupUser(previousValue);
            }
        }
    }
}

public partial class User
{
    [Key()]
    public virtual int ID   { get; set; }

    public virtual string Name  { get; set; }
}

【问题讨论】:

  • John - 我遇到了您的确切问题,您介意分享您的解决方法吗?
  • @Zein:如果您有问题提出并提供的解决方案对您不起作用,您应该提出一个新问题并将此问题链接作为参考。答案只是为了解决问题。

标签: silverlight silverlight-4.0 poco ria


【解决方案1】:

这可能是因为您的 DomainService 中没有用于对 User 类进行 CRUD 操作的方法(我猜是因为您没有为您的服务提供代码)。

在 RIA 中,如果你想向客户端公开一个类型,你必须做以下两件事之一:

(A) 在服务上公开该类型的 CRUD 操作

-或-

(B) 在父类(在本例中为您的 TaskTime 类)上使用 [Composition] 属性。

[Composition] 属性使得 RIA 只会通过它的父类向 User 类授予 CRUD 操作 - 因此 User 类不会在 Service 上拥有自己的 CRUD 操作,因此只能通过其父类进行更新班级。

您选择哪条路取决于您希望应用如何运行。在某些情况下,[Composition] 是合适的。

【讨论】:

  • 谢谢 - 我刚刚解决了这个问题,但我会回去尝试 [Composition] 属性。这是一个只读查看器,用于查看在其他地方填充的数据,因此应该可以满足我的需要。
猜你喜欢
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多