Silverlight 4.0 RIA服务和POCO类出现问题,未发送关联的子集合

Silverlight 4.0 RIA服务和POCO类出现问题,未发送关联的子集合,silverlight-4.0,poco,wcf-ria-services,dto,Silverlight 4.0,Poco,Wcf Ria Services,Dto,这是我的设置:我有一些数据,实际上是一个对象DTO图,表示SSAS对象,我希望通过RIA服务序列化并发送这些对象,供silverlight应用程序使用。下面是一个简单的例子: public class Database { [Key] public int ID { get; set;} public string Name { get; set;} [Include] [Association("DatabaseCue", "ID", "DatabaseID"

这是我的设置:我有一些数据,实际上是一个对象DTO图,表示SSAS对象,我希望通过RIA服务序列化并发送这些对象,供silverlight应用程序使用。下面是一个简单的例子:

public class Database
{
   [Key]
   public int ID { get; set;}

   public string Name { get; set;}

   [Include]
   [Association("DatabaseCue", "ID", "DatabaseID"]
   public IEnumerable<Cube> Cubes { get; set;}
}
public class Cube
{
   [Key]
   public int ID { get; set;}

   public int DatabaseID { get; set;}

   public string Name { get; set;}

   // other Cube properties
}
myAmoAdapter.GetDatabases检索数据库集合,并填充其子多维数据集,但在客户端,多维数据集是空的!我不知道该怎么做!或者也许就不会了


有人知道这为什么不起作用以及如何修复吗?我将不胜感激。

唯一与我的做法不同的是公共IEnumerable多维数据集{get;set;}。我通常会这样做:

public List<Cube> Cubes { get; set;}
此外,您还需要一个组合标签,如下所示:

[Include]
[Composition]
[Association("DatabaseCue", "ID", "DatabaseID"]
public IEnumerable<Cube> Cubes { get; set;}

唯一与我的做法不同的是公共IEnumerable多维数据集{get;set;}。我通常会这样做:

public List<Cube> Cubes { get; set;}
此外,您还需要一个组合标签,如下所示:

[Include]
[Composition]
[Association("DatabaseCue", "ID", "DatabaseID"]
public IEnumerable<Cube> Cubes { get; set;}

您是否在客户端检查了它是否具有多维数据集的EntitySet

如果这不可用,那么您还需要告诉RIA服务,多维数据集是一个应该在客户机上生成的类。您可以通过在服务器端定义一个虚拟方法来实现这一点:

public IQueryable<Cube> GetCubesDummy()
{
   return new List<Cube>().AsQueryable();
}

如果EntitySet存在,还应检查外键是否正常。仅仅因为集合是在服务器上填充的,这并不意味着多维数据集元素中的数据库ID是正确的。

您是否在客户端检查了它是否具有多维数据集的EntitySet

如果这不可用,那么您还需要告诉RIA服务,多维数据集是一个应该在客户机上生成的类。您可以通过在服务器端定义一个虚拟方法来实现这一点:

public IQueryable<Cube> GetCubesDummy()
{
   return new List<Cube>().AsQueryable();
}

如果EntitySet存在,还应检查外键是否正常。仅因为集合是在服务器上填充的,这并不意味着多维数据集元素中的DatabaseID是正确的。

您可以显式设置数据库对象上关联属性的IsForeignKey属性


可以在数据库对象上显式设置关联属性的IsForeignKey属性


您可能希望尝试的一件事是在构造函数中初始化数据库上的多维数据集集合

public class Database
{
  public Database
  {
    Cubes = new List<Cube>();
  }

  [Key]
  public int ID { get; set;}

  public string Name { get; set;}

  [Include]
  [Association("DatabaseCue", "ID", "DatabaseID"]
  public IEnumerable<Cube> Cubes { get; set;}
}

如果关联的实体集合未初始化,RIA服务有时会表现出一些奇怪的行为。

您可能需要尝试的一件事是在构造函数中初始化数据库上的多维数据集

public class Database
{
  public Database
  {
    Cubes = new List<Cube>();
  }

  [Key]
  public int ID { get; set;}

  public string Name { get; set;}

  [Include]
  [Association("DatabaseCue", "ID", "DatabaseID"]
  public IEnumerable<Cube> Cubes { get; set;}
}

如果关联的实体集合没有初始化,RIA服务有时会表现出一些奇怪的行为。

我也遇到了类似的问题,结果表明,如果我将子项添加到父项集合中,并且还专门设置父项id,那么RIA服务也会起作用

所以


如果我没有DatabaseID=db.ID,它们将被设置为零,RIA服务将不返回任何内容。Bug?

我也遇到了类似的问题,结果证明,如果我将子对象添加到父对象的集合中,并专门设置父对象id,那么它就会起作用

所以


如果我没有DatabaseID=db.ID,它们将被设置为零,RIA服务将不返回任何内容。Bug?

客户端上所有my类的实体类型都生成得很好。我不知道你所说的客户端的实体集到底是什么意思。还有,对于你的第二个音符,是的,外键没问题@AbdouMoumen With EntitySet我指的是DomainContext.Cubes属性,它使用DomainContext.GetEntitySet。调用该方法后,是否可以检查DomainContext.Cubes中是否有任何对象?如果是这样,那么DatabaseID是错误的,生成的筛选器找不到正确的元素。已生成属性多维数据集,但其中没有对象:@AbdouMoumen在这种情况下,我认为服务器端的子集合没有正确填充。您的Include和Association属性看起来正常。因此,如果没有物体通过电线发送,那么似乎没有。这就是奇怪的部分。正如我在问题中提到的,我检查了服务器端的集合,它们被填充得很好!我重新检查了外键,它们也都很好!客户端上所有我的类的实体类型都生成得很好。我不知道你所说的客户端的实体集到底是什么意思。还有,对于你的第二个音符,是的,外键没问题@AbdouMoumen With EntitySet我指的是DomainContext.Cubes属性,它使用DomainContext.GetEntitySet。调用该方法后,是否可以检查DomainContext.Cubes中是否有任何对象?如果是这样,那么DatabaseID是错误的,生成的筛选器找不到正确的元素。已生成属性多维数据集,但其中没有对象:@AbdouMoumen在这种情况下,我认为服务器端的子集合没有正确填充。您的Include和Association属性看起来正常。因此,如果没有对象通过导线发送,则似乎没有对象。t
这是奇怪的地方。正如我在问题中提到的,我检查了服务器端的集合,它们被填充得很好!我重新检查了外键,它们也都很好!这也不起作用:我开始认为问题出在其他地方,但我就是不知道在哪里!这也不起作用:我开始认为问题出在其他地方,但我就是不知道在哪里!所有多维数据集是否具有相同的ID值0?我的意思是,您是否只是通过生成没有id的对象来发送对象,而不是在实际生成密钥时将其持久化到db?所有多维数据集是否都具有相同的id值0?我的意思是,当密钥实际生成时,您只是通过生成没有id的对象,而不是真正地将它们持久化到db来发送对象吗?