.NET XML Web服务和NHibernate:如何使用属性

时间:2010-11-09 08:10:51

标签: c# .net web-services nhibernate

使用nhibernate创建的数据库的域库。当我在库下创建web服务时,我遇到了许多关于无法在我的DataContract类中使用接口的错误。如参见

[DataContract]
public class MyClass
{
    ... 
    [DataMember]
    public virtual IList<Item> Items {get;set;}
    ...
}

接下来,我决定添加一些策略:我添加了类型为List的其他属性:

[DataContract]
public class MyClass
{
    ...
    [XmlIgnore]
    public virtual IList<Item> prItems {get;set;}

    [DataMember]
    public virtual List<Item> Items {
        get{
            return this.prItems.ToList(); 
       }
       set{
           this.prItems = value;
       }
    }
    ...
}

这项工作很好 - 我可以在我的客户端上获取列表,但是当我需要更改项目列表时 - 这在服务器上是空的,因为客户端对prItems一无所知。 你能为我建议什么?

2 个答案:

答案 0 :(得分:2)

您不能使用使用NHibernate加载的类实例并且包含集合,因为NHibernate使用代理集合类进行延迟加载,而NHibernate集合代理类不可序列化。

构建您在Web服务界面中使用的单独DTO类。

答案 1 :(得分:0)

使用您的初始尝试,但使用其他属性:

[DataContract]
[KnownType(typeof(List<Item>))]
public class MyClass
{
    ... 
    [DataMember]
    public virtual IList<Item> Items {get;set;}
    ...
}

更多信息:http://msdn.microsoft.com/en-us/library/ms730167.aspx

修改

将KnownType更新为完整的通用定义