【发布时间】:2009-07-06 10:14:38
【问题描述】:
我能否以某种方式告诉 NHibernate 将我的一对多关系映射到 List 类型而不是 IList 接口的属性?
我知道 NHibernate 使用它自己的 IList 实现来进行延迟加载,但我不需要这个功能。相反,我需要一个可序列化的类,而我无法通过使用 IList 接口而不是具体的 List 类来实现。
【问题讨论】:
我能否以某种方式告诉 NHibernate 将我的一对多关系映射到 List 类型而不是 IList 接口的属性?
我知道 NHibernate 使用它自己的 IList 实现来进行延迟加载,但我不需要这个功能。相反,我需要一个可序列化的类,而我无法通过使用 IList 接口而不是具体的 List 类来实现。
【问题讨论】:
简单的答案是否定的,你不能告诉 NHibernate 使用List<T>。 earlier question 对此进行了更详细的讨论。
我可以在序列化 NHibernate 对象时找到的best article 是针对 WCF 用户的。
【讨论】:
如果你真的需要这样做,你唯一真正的选择是改变你的序列化策略。
您可以在 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...
}
【讨论】: