c# - 如何使用 Fluent NHibernate 映射序列化/反序列化元素列表?

标签 c# nhibernate serialization fluent-nhibernate fluent-nhibernate-mapping

我正在尝试使用 Fluent NHibernate 映射来序列化/反序列化数据。

从“根”实体开始,我使用映射构建一个图,其中所有实体都链接到该实体。然后我序列化这组实体。

我有这个映射(只有相关部分):

[Serializable]
public class Foo
{
    public virtual IList<Bar> Bars { get; set;}
    public virtual IList<System.Guid> Guids { get; set; }
}

[Serializable]
public class Bar
{
    public virtual Foo Foo { get; set; }
}

public class BarMap : ClassMap<Bar>
{
    References(x => x.Foo, "idFoo").Not.Nullable();
}

public class FooMap : ClassMap<Foo>
{
    HasMany(x => x.Bars).KeyColumn("idFoo");
    HasMany(x => x.Guids).Table("guids").KeyColumn("idFoo").Element("guid").AsBag().Not.LazyLoad();
}

对于 Foo 和 Bar 序列化和反序列化,一切正常。但是,当尝试将反序列化数据持久保存回数据库时,Guids 列表不会持久保存,尽管它的数据位于 Foo 对象中。

我用谷歌搜索了一段时间,但没有找到任何有用的东西。我也尝试过 Inverse,但无济于事。我还尝试了 Cascade.SaveUpdate(),但也没有用。

是因为它使用额外的表将值存储为 Element 吗?这是我能想到的关于此列表的唯一特殊性。

我缺少什么会阻止此恢复工作?

欢迎任何想法。谢谢。

编辑:

Guids 列表已正确序列化和反序列化。唯一没有完成的是 guids 列表的数据库插入,但它存在于反序列化数据中。

编辑 2:

奇怪的是,项目中其他地方的另一段代码做了同样的事情,这次成功了。所以也许这是一个晦涩的 NHibernate 配置参数,双方都不同,但 mainNH.xml.config 每次都是相同的文件。

最佳答案

很可能您的保存/更新没有级联到子集合。

将映射更改为

  HasMany(x => x.Guids).Cascade.SaveUpdate().Table("guids").KeyColumn("idFoo").Element("guid").AsBag().Not.LazyLoad();

关于c# - 如何使用 Fluent NHibernate 映射序列化/反序列化元素列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958342/

相关文章:

c# - 当 C# Reactive Framework 中源流和目标流相同时,SelectMany 如何工作?

c# - 读取 XML 文件作为数据集

c# - 为什么我们不能在另一个类方法之外使用类方法?

c# - NHibernate QueryOver 两次加入一个集合

c# - 如何在 C# 中对二进制 MIME 附件进行编码?

c# - 比 nHibernate 更轻的东西

c# - 在 Criteria Query 中选择多个实体

c# - NetworkComms 自定义对象错误 - "objectToSerialize must implement IExplicitlySerialize"

c# - BinaryFormatter 序列化和反序列化线程安全吗?

Java RMI,我可以发送一个序列化的对象而不把类文件放在网络服务器上吗?