我在SL5 + EF + WCF应用上遇到此网络服务错误有时。
“域操作条目'AddUserPresentationModelToRole'的参数'角色'必须是预定义的可序列化类型之一。”
here是一个类似的错误,但他的解决方案对我不起作用。
我有代码生成的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; }
}
也无法让解决方案可靠地失败。似乎每当我稍微更改服务,即重新编译时,一切都会正常工作。
RIAServices unsupported types on hand-built DomainService - 似乎也在说同样的事情,用LinqToEntitiesDomainServiceDescriptionProvider修饰手工构建的服务应该可行。
答案 0 :(得分:0)
可能的答案here也会在此处发布结果。
来自科林布莱尔: 我有点惊讶它曾经有效,我认为我没有看到任何人试图将额外的实体传递到命名更新之前。它可能是RIA服务中的一个错误。你想要完成什么?
注意,您的ObjectContext存在内存泄漏,因为它没有被正确处理掉。您是否有理由不使用LinqToEntitiesDomainSerivce?它将负责管理ObjectContext的生命周期。
结果:
1)这是有道理的。现在已经重构了更合理的参数(整数/字符串),并且一切正常。
2)将我的3个独立服务整合到一个服务中,该服务使用LinqToEntitiesDomainSerivce。之前我将它拆分的原因是假设使用带有PresentationModel的CustomUpdate不起作用..我不得不继承DomainService。我通过制作方法解决了这个问题:
// need this to avoid compile errors for AddUserPresentationModelToRole.. should never be called
public IQueryable<UserPresentationModel> GetUserPresentationModel()
{
return null;
}