c# - Fluent NHibernate - detached collection is always dirty -
i have 2 simple classes, parent , child. parent has collection of kid objects.
[serializable, datacontract(isreference = true)] public class kid { [datamember] public virtual int id { get; set; } [datamember] public virtual datetime version { get; set; } } [serializable, datacontract(isreference = true)] public class parent { private ilist<child> _children = new list<child>(); [datamember] public virtual int id { get; set; } [datamember] public virtual datetime version { get; set; } [datamember] public virtual ilist<child> children { { homecoming _children; } set { _children = value; } } } they mapped this:
public class childmap : classmap<child> { public childmap() { schema(commonmapsettings.schemaname); table("child"); id(x => x.id); version(x => x.version); } } public class parentmap : classmap<parent> { public parentmap() { schema(commonmapsettings.schemaname); table("parent"); id(x => x.id); version(x => x.version); hasmany(x => x.children).keycolumn("parentid").cascade.alldeleteorphan(); } } i have test that:
creates parent , child. saves objectgraph database. creates re-create of parent , kid serializing , memorystream simulate sending , forth client.does merge of re-create should identical original.
// create parent child. var parent = new parent(); parent.children.add(new child()); // save object graph. using (var session = sessionfactory.opensession()) { using (var transaction = session.begintransaction()) { session.saveorupdate(parent); transaction.commit(); } } // create re-create of entire object graph serializing memory stream , var serializer = new datacontractserializer(parent.gettype()); var memorystream = new memorystream(); serializer.writeobject(memorystream, parent); memorystream.position = 0; parent serializedparent = (parent)serializer.readobject(memorystream); // merge, utilize re-create identical. no changed should saved. using (var session = sessionfactory.opensession() { using (var transaction = session.begintransaction()) { serializedparent = session.merge(serializedparent); transaction.commit(); } } // fails. nhibernate updated version on parent. assert.areequal(parent.version, serializedparent.version); no changes has been made parent or kid , merge done in new session, why parent new version?
c# .net nhibernate fluent-nhibernate
No comments:
Post a Comment