Did you also see and follow the last link on that page: http://nhprof.com/Learn/Alert?name=SuperfluousManyToOneUpdate
The best explanation of inverse so far. -Markus 2009/12/21 pnewhook <peter.newh...@gmail.com>: > Hi, thanks for that. I was stumbling over the example given in the > documentation at the bottom of the page here > http://www.castleproject.org/activerecord/documentation/trunk/usersguide/relations/hasmany.html > > On Dec 20, 12:39 pm, Markus Zywitza <markus.zywi...@gmail.com> wrote: >> Short answer: you can't do that without inverse. >> >> Long answer: >> >> When you add a new post to a blog and save the blog, the post doesn't >> exist on the DB in that moment, so NH will save it. It will simply >> take the post object and insert its contents in the DB and since the >> Blog reference is null, exactly this will be inserted. Then the blog >> is saved. NH inspects the Posts collection and updates all objects >> there with the blog that is currently saved. So the blog reference on >> post will be null, but only temporary. After saving is complete, the >> FK in't null anymore. >> >> If you use inverse=true, the inverse collection of the blog will not >> be processed. You have to set post.Blog explicitly before saving and >> therefore no null value will be inserted in the table. >> >> If you can't use inverse=true, you'll have to add a method to add a >> member to that collection: >> >> public void AddPost(Post post) >> { >> post.Blog = this; >> posts.Add(post); >> >> } >> >> -Markus >> >> 2009/12/17 pnewhook <peter.newh...@gmail.com>: >> >> > Hello, >> >> > I've been following the tutorial to make the simple blog. I'm creating >> > mine in ASP.Net, but I've been having trouble creating a post that >> > references a Blog instance where I don't use Inverse=true >> >> > part of my blog class >> >> > [ActiveRecord] >> > public class Blog : ActiveRecordBase<Blog> >> > { >> > private int id; >> > private string name; >> > private string author; >> > private IList<Post> posts = new List<Post>(); >> >> > public Blog() >> > {} >> >> > public Blog(string name, string author) >> > { >> > this.name = name; >> > this.author = author; >> > } >> >> > [HasMany] >> > public IList<Post> Posts >> > { >> > get { return posts; } >> > set { posts = value; } >> > } >> >> > [PrimaryKey (PrimaryKeyType.Identity)] >> > public int Id >> > { >> > get {return id;} >> > set { this.id = value; } >> > } >> >> > part of my post class >> >> > [ActiveRecord] >> > public class Post : ActiveRecordBase<Post> >> > { >> > private int id; >> > private String title; >> > private String contents; >> > private String category; >> > private DateTime created; >> > private int published; >> > private Blog blog; >> >> > public Post() >> > { >> > created = DateTime.Now; >> > } >> >> > [BelongsTo("BlogId")] >> > public Blog Blog >> > { >> > get{return blog;} >> > set {this.blog=value;} >> > } >> >> > [PrimaryKey(PrimaryKeyType.Identity)] >> > public int Id >> > { >> > get { return id; } >> > set { id = value; } >> > } >> >> > and the default.aspx page that actually does something. >> > public partial class _Default : System.Web.UI.Page >> > { >> > protected void Page_Load(object sender, EventArgs e) >> > { >> > Person myperson = new Person("name", "password"); >> > myperson.Create(); >> > Debug.Write("Created Person \n"); >> >> > Blog myBlog = new Blog(); >> > myBlog.Author = "non inverse"; >> > myBlog.Name = "non inverse"; >> > myBlog.Create(); >> > System.Diagnostics.Debug.Write("Blog Created \n"); >> >> > Post myPost = new Post(); >> > myPost.Contents = "non inverse"; >> > myPost.Title = "non inverse"; >> > myPost.Category = "Stuff"; >> >> > myPost.Published = 1; >> > myPost.Create(); >> >> > myBlog.Posts.Add(myPost); >> > myBlog.Update(); >> >> > System.Diagnostics.Debug.Write("Post Created \n"); >> >> > } >> > } >> >> > I get an error on myPost.Create() because it can't insert a null value >> > into BlogId. However, I tried calling myBlog.Posts.Add(myPost); before >> > creating the post and all the values were still null. What order >> > should I do this in. >> >> > Everything works for me when I use inverse=true. >> >> > Thanks for your help. This is my first ORM and I really like it. >> >> > -- >> >> > You received this message because you are subscribed to the Google Groups >> > "Castle Project Users" group. >> > To post to this group, send email to castle-project-us...@googlegroups.com. >> > To unsubscribe from this group, send email to >> > castle-project-users+unsubscr...@googlegroups.com. >> > For more options, visit this group >> > athttp://groups.google.com/group/castle-project-users?hl=en. > > -- > > You received this message because you are subscribed to the Google Groups > "Castle Project Users" group. > To post to this group, send email to castle-project-us...@googlegroups.com. > To unsubscribe from this group, send email to > castle-project-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/castle-project-users?hl=en. > > > -- You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to castle-project-us...@googlegroups.com. To unsubscribe from this group, send email to castle-project-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en.