2

I have a parent and child table and entites are created and mapped using one to many relation ship. On one to many side when i use Inverse() then the child table's foreign key value is inserted as null.

public class TableA { public virtual long ID { get; set; } public virtual string Name { get; set; } public virtual IList<TableB> TableB { get; set; } } public class TableB { public virtual long ID { get; set; } public virtual string Name { get; set; } public virtual TableA TableA { get; set; } } public class TableAMap : ClassMap<TableA> { public TableAMap() { Id(x=>x.ID); Map(x=>x.Name).Column("Name"); HasMany(x=>x.TableB) .KeyColumn("TableA_ID") .Inverse() .Cascase.All() .Not.LazyLoad(); } } public class TableBMap : ClassMap<TableB> { public TableBMap() { Id(x=>x.ID); Map(x=>x.Name).Column("Name"); References(x=>x.TableA).Column("TableA_ID").Not.LazyLoad(); } } 

Note When the Inverse() is removed from many to one the new records are inserted without any issues and the foreign key is inserted without any issues but when i update a record the foreign key of the existing records are replaced as null.

Please help me i looked in to similar questions but it doesn't help me.

Fluent NHibernate one-to-many relationship setting foreign key to null

3
  • You should post your real mapping. Your HasMany<TableA>(x=>x.TableB).KeyColumn("TableA_ID").Inverse().Cascase.All().Not.LazyLoad(); doesn't seem to work with <TableA> Commented Nov 27, 2012 at 4:37
  • Yes sorry i have corrected the one with HasMany<TableB>(x=>x.TableB).KeyColumn("TableA_ID").Inverse().Cascase.All().Not‌​.LazyLoad(); Commented Nov 27, 2012 at 6:59
  • This example is hard to decipher. Again, I think you should post the actual code (or a subset of it) and also the schema you're currently working with. Commented Nov 27, 2012 at 15:53

2 Answers 2

3

Refer to this link which has the solution for this issue.

Refer this Solution link

The map class should be:

public class TableAMap : ClassMap<TableA> { public TableAMap() { Id(x=>x.ID); Map(x=>x.Name).Column("Name"); HasMany<TableB>(x=>x.TableB) .KeyColumn("TableA_ID") .Cascade.All().Inverse(); } } public class TableBMap : ClassMap<TableB> { public TableBMap() { Id(x=>x.ID); Map(x=>x.Name).Column("Name"); References<TableA>(x=>x.TableA).Column("TableA_ID").Not.Nullable(); } } 
Sign up to request clarification or add additional context in comments.

Comments

1

it's hard to tell exactly without seeing the code which inserts. However my crystal ball tells me you probably forgot the last line

Parent parent = new Parent(); Child child = new Child(); parent.Children.Add(child); child.Parent = parent; <-- this is important because this will maintain the foreign key 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.