silverlight – 在WCF RIA服务中使用实体作为Invoke方法的参数的替代方法

你好,你好!关于StackOverflow的第一个问题! 🙂

所以这就是场景:我们正在开发一个使用Silverlight 4的Web应用程序,并使用WCF RIA Services 1.0 SP1 Beta进行Web服务.我在Entity Framework Designer中有我的实体,但我使用稍微修改过的ADO.NET C#POCO实体生成器模板来生成类.

我想做的是在域服务中使用以下签名的方法:

[EnableClientAccess]
public class ResultService : DomainService
{
    [Invoke]
    public SerializableResult CalculateResult(EntityOne e1, EntityTwo e2);
}

我通过其他服务中的查询将EntityOne和EntityTwo返回给客户端,如下所示:

[EnableClientAccess]
public class EntityOneService : DomainService
{
    public IQueryable<EntityOne> GetEntityOnes();
}

[EnableClientAccess]
public class EntityOneService : DomainService
{
    public IQueryable<EntityTwo> GetEntityTwos();
}

这些类在Silverlight项目中成功生成. SerializableResult没有密钥.

当我尝试编译时,我收到以下错误:“名为’CalculateResult’的操作不符合所需的签名.参数类型必须是实体或复杂类型,复杂类型的集合或预定义的可序列化类型之一. “

在我的研究中,我发现的最有用的信息是在this post by Jeff Handley的评论中.

值得注意的是,彼得在评论中问道:

I get an ‘does not conform to the required signature …’ compile error if my complex object has an [Key] Attribute. When I remove this attribute I can use the object as parameter for an Invoke operation.

杰夫的回应:

This is by design. Complex objects cannot have Key properties. If you have a Key the class gets treated as an Entity.

所以听起来似乎任何进一步的努力试图让我的方法工作将是徒劳的.但是,我想知道是否有其他人遇到过这个问题,以及他们为解决这个问题做了什么.

非常感谢!

我有以下内容,它适用于我.

namespace BusinessApplication2.Web
{
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using System.ServiceModel.DomainServices.Hosting;
    using System.ServiceModel.DomainServices.Server;

    [EnableClientAccess()]
    public class DomainService1 : DomainService
    {
        public IQueryable<EntityOne> GetEntityOnes()
        {
            return null;
        }

        public IQueryable<EntityTwo> GetEntityTwos()
        {
            return null;
        }

        [Invoke]
        public SerializableResult GetSerializableResult(EntityOne one, EntityTwo two)
        {
            return new SerializableResult() { Result = "It woooooorrrked!" };
        }
    }

    public class EntityOne
    {
        [Key]
        public int Id { get; set; }
    }

    public class EntityTwo
    {
        [Key]
        public int Id { get; set; }
    }

    public class SerializableResult
    {
        public string Result { get; set; }
    }
}
相关文章
相关标签/搜索