0

我有时会在 SL5 + EF + WCF 应用程序上收到此 Web 服务错误。

“域操作条目‘AddUserPresentationModelToRole’的参数‘角色’必须是预定义的可序列化类型之一。”

是一个类似的错误,但是他的解决方案对我不起作用。

我有代码生成的 DomainService ,它将数据库实体呈现给我的客户:

 [EnableClientAccess()]
public partial class ClientAppDomainService : LinqToEntitiesDomainService<ClientAppUserEntitlementReviewEntities>
{

    public IQueryable<Account> GetAccounts()
    {
        return this.ObjectContext.Accounts;
    }
    //..etc...

和我的自定义服务,它显示了一个演示模型和数据库实体。

[EnableClientAccess]    
[LinqToEntitiesDomainServiceDescriptionProvider(typeof(ClientAppUserEntitlementReviewEntities))]
public class UserColourService : DomainService
{

    [Update(UsingCustomMethod = true)]
    public void AddUserPresentationModelToRole(UserPresentationModel userPM, Role role, Reviewer reviewer)
    {
        ...
    }

    public IDictionary<long, byte> GetColourStatesOfUsers(IEnumerable<RBSUser> listOfUsers, string adLogin) 
    {
        //....
    }
}

和 PresentationModel:

public class UserPresentationModel
    {
        [Key]
        public long UserID { get; set; }

        public byte UserStatusColour { get; set; }

        public string MessageText { get; set; }

        [Include]
        [Association("asdf", "UserID", "UserID")]
        public EntityCollection<Account> Accounts { get; set; }

        public DateTime AddedDate { get; set; }

        public Nullable<long> CostCentreID { get; set; }

        public DateTime? DeletedDate { get; set; }

        public string EmailAddress { get; set; }

        public long EmployeeID { get; set; }

        public string FirstName { get; set; }

        public Nullable<bool> IsLeaver { get; set; }

        public string LastName { get; set; }

        public DateTime LastSeenDate { get; set; }

        public string LoginDomain { get; set; }

        public string LoginName { get; set; }

        public byte WorldBuilderStatusID { get; set; }

    }

也无法获得可靠失败的解决方案。似乎每当我稍微更改服务时,即重新编译它,一切正常。

手工构建的 DomainService 上的 RIAServices 不受支持的类型 - 似乎在说同样的事情,用 LinqToEntitiesDomainServiceDescriptionProvider 装饰手工构建的服务应该可以工作。

4

1 回答 1

0

此处可能的答案也将在此处 发布结果。

来自 Colin Blair:我有点惊讶它居然能奏效,我认为我之前没有见过有人试图将额外的实体传递到命名更新中。它可能是 RIA 服务中的一个错误,它完全可以工作。你想达到什么目的?

旁注,您的 ObjectContext 存在内存泄漏,因为它没有被正确处理。您是否有理由不使用 LinqToEntitiesDomainSerivce?它会为您管理 ObjectContext 的生命周期。

结果:

1)这是有道理的。现在已经重构为更合理的参数(整数/字符串),并且一切正常。

2) 将我的 3 个独立服务合并为 1 个服务,该服务使用 LinqToEntitiesDomainSerivce。我之前把它分开的原因是假设有一个带有 PresentationModel 的 CustomUpdate 不起作用..我不得不继承 DomainService 。我通过制作一个方法解决了这个问题:

// need this to avoid compile errors for AddUserPresentationModelToRole.. should never be called
public IQueryable<UserPresentationModel> GetUserPresentationModel()
{
    return null;
}
于 2013-01-15T17:09:35.223 回答