问题
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
回答1:
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();
}
}
回答2:
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
来源:https://stackoverflow.com/questions/13576222/fluent-nhibernate-one-to-many-when-inverse-is-used-child-tables-foreign-key-is