2

我可以以某种方式告诉 NHibernate 将我的一对多关系映射到 List 类型的属性而不是接口 IList 吗?

我知道 NHibernate 使用它自己的 IList 实现来延迟加载,但我不需要这个功能。相反,我需要一个可序列化的类,而我无法通过使用 IList 接口而不是具体的 List 类来完成。

4

2 回答 2

1

简单的答案是否定的,你不能告诉 NHibernate 使用List<T>. 这个较早的问题更详细地讨论了它。

我能找到的关于序列化 NHibernate 对象的最佳文章是针对 WCF 用户的。

于 2009-07-06T12:30:20.470 回答
0

如果你真的需要这样做,你唯一真正的选择是改变你的序列化策略。

您可以在 System.Runtime.Serialization 中使用 DataContract 属性,而不是使用标准的 Serialization 属性。这将支持接口的序列化。

如果您需要使用标准序列化,那么您可以使用单独的属性来存储您希望被序列化的值,并在序列化时简单地填充它:

//NHibernate property
public virtual IList<Entity> Entities
{
    get;
    set;
}

//Serialized property
public List<Entity> SerializedEntities
{
    get;
    set;
}

[OnSerializing]
void DoStuff(StreamingContext context)
{
    SerializedEntities = // Whatever you want to serialize...
}
于 2009-07-06T13:01:18.777 回答