Somebody please? Is this something that nobody knows or I don't provide enough info?
2009/12/3 Dmitiry Nagirnyak <[email protected]> > Anybody? > > 2009/12/2 Dmitiry Nagirnyak <[email protected]> > > Hi, >> >> I need to map 2 classes: Blog and Post. >> There is an association (blog.Posts-post.BelongsTo) with custom collection >> (that supports notification if items were added/removed). >> >> Now the questions: >> >> - What modification should be done to map the classes? >> - What XML mapping should look like? >> >> The only condition is that the tests below should not be touched and >> passing. >> >> Thanks a lot. >> Dmitriy. >> >> The code: >> >> public class Post { >> private Blog belongsTo; >> public virtual Blog BelongsTo { >> get { >> return belongsTo; >> } >> set { >> if (value == null) { >> if (belongsTo != null) >> belongsTo.Posts.Remove(this); >> } else >> value.Posts.Add(this); >> belongsTo = value; >> } >> } >> } >> >> public class Blog { >> public Blog() { >> posts = new SubscribableCollection<Post>(); >> posts.OnAdded += item => { >> if (item.BelongsTo != this && item.BelongsTo != null) >> item.BelongsTo.Posts.Remove(item); >> item.BelongsTo = this; >> }; >> posts.OnRemoved += item => item.BelongsTo = null; >> } >> >> private SubscribableCollection<Post> posts; >> public virtual ICollection<Post> Posts { >> get { >> return posts; >> } >> } >> } >> >> >> public class SubscribableCollection<T> : ICollection<T> { >> public event OnItemDelegate<T> OnAdded; >> public event OnItemDelegate<T> OnRemoved; >> // The implementation is stripped, you get what it does >> } >> >> >> >> >> [TestFixture] >> public class OneToMany { >> >> [Test] >> public void Assign() { >> var b = new Blog(); >> var p = new Post(); >> >> p.BelongsTo = b; >> >> Assert.That(b.Posts.First(), Is.SameAs(p)); >> } >> >> [Test] >> public void ReAssign() { >> var b1 = new Blog(); >> var b2 = new Blog(); >> var p = new Post(); >> >> p.BelongsTo = b1; >> p.BelongsTo = b2; >> >> Assert.That(b2.Posts.First(), Is.SameAs(p)); >> Assert.That(b1.Posts, Is.Empty); >> } >> >> [Test] >> public void UnAssign() { >> var b = new Blog(); >> var p = new Post(); >> >> p.BelongsTo = b; >> p.BelongsTo = null; >> >> Assert.That(b.Posts, Is.Empty); >> } >> >> [Test] >> public void AddToList() { >> var b = new Blog(); >> var p = new Post(); >> >> b.Posts.Add(p); >> Assert.That(p.BelongsTo, Is.SameAs(b)); >> } >> >> [Test] >> public void AddDuplicateToList() { >> var b = new Blog(); >> var p = new Post(); >> >> b.Posts.Add(p); >> b.Posts.Add(p); >> Assert.That(b.Posts.Count, Is.EqualTo(1)); >> } >> >> [Test] >> public void MoveToOtherList() { >> var b1 = new Blog(); >> var b2 = new Blog(); >> var p = new Post(); >> >> b1.Posts.Add(p); >> b2.Posts.Add(p); >> >> Assert.That(p.BelongsTo, Is.SameAs(b2)); >> Assert.That(b1.Posts, Is.Empty); >> Assert.That(b2.Posts, Is.Not.Empty); >> } >> >> [Test] >> public void RemoveFomList() { >> var b = new Blog(); >> var p = new Post(); >> >> b.Posts.Add(p); >> b.Posts.Remove(p); >> Assert.That(p.BelongsTo, Is.Null); >> } >> } >> > > -- You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
