我正在尝试使用 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/