继承的实体项目未被识别为实体?

时间:2011-02-11 21:42:25

标签: c# vb.net entity-framework inheritance wcf-ria-services

我正在尝试创建一个泛型类,但遇到了问题。这是我的基本类定义:

public class QueueObject<T> where T : System.ServiceModel.DomainServices.Client.Entity
{
    public string LoadingMessage { get; set; }
    public System.ServiceModel.DomainServices.Client.EntityQuery<T> Query { get; set; }
}

我正在尝试将此类的实例添加到队列

private Queue<QueueObject<Entity>> _queue;
this._queue.Enqueue(new QueueObject<MyEntity> {Query = MyContext.GetMyEntitiesQuery(), LoadingMessage = "Loading some stuff"});

这不起作用。我得到一个错误,说QueueObject不能转换为QueueObject。我不明白,因为MyEntity继承自Entity。我做错了吗?

如果它有帮助,这是VB中的相同代码:

Public Class QueueObject(Of T As System.ServiceModel.DomainServices.Client.Entity)
    Public Property LoadingMessage As String
    Public Property Query As System.ServiceModel.DomainServices.Client.EntityQuery(Of T)
End Class

Private _queue As Queue(QueueObject(Of Entity))
Me._queue.Enqueue(New QueueObject(Of MyEntity) With {.Query = MyContext.GetMyEntitiesQuery(), .LoadingMessage = "Loading some stuff..."})

2 个答案:

答案 0 :(得分:0)

问题在于您将队列声明为Queue<Entity>。我想你想要的是:

Queue<QueueObject<MyEntity>> _queue;

这将特别修复您的编译问题。虽然这不会帮助您将队列“泛化”以包含包含任何其他类型实体的QueueObjects。要解决这个问题,它会一直更改到GetMyEntitiesQuery()以返回基本的EntityQuery ......

在可能的情况下,我会找出你不需要通用的部分,从那里开始。也就是说,你可以在哪里让多态实现它的魔力。例如,QueueObject的EntityQuery是强类型的吗?

答案 1 :(得分:0)

仍然不确定原始错误的原因,但可能的解决方案是让每个实体实现一个接口。然后使QueueObject成为此接口类型。

我最后走了另一条路,所以这最终变得无关紧要了。