The primary key for one of my tables is a string. THe string is a code which i would like to update at some point of time. How can I do this in nhibernate.
Please note there is a foreign key connected to this column which I need to cascade updates to.
For the sake of discussion let us assume my mapping is as below
public class Code
{
public virtual string Id { get; set; }
public virtual string Name { get; set; }
public class CodeMap : ClassMap<Code>
{
public CodeMap()
{
Table("BusinessCode");
Id(x => x.Id, "Id");
Map(x => x.Name, "Name").Nullable();
}
}
}
public class Data
{
public virtual int Key { get; set; }
public virtual Code DataCode{ get; set; }
public virtual string Desc { get; set; }
public class DataMap : ClassMap<Data>
{
public DataMap()
{
Table("Data");
Id(x=>x.Key,"Key");
Map(x => x.Desc).Column("desc");
References(x => x.Code, "BusinessCode").Nullable().Cascade.SaveUpdate();
}
}
}
Table structure
BusinessCode Table
Id(nvarchar(100)) -primarykey
Name(nvarchar(1024))
Data Table
id(int) - auto generated primary key
businesscode(nvarchar(100)) - foreign key to BusinessCode Id
desc(nvarchar(1024))
here’s the code which i use to update my object
using (var trans = Session.BeginTransaction())
{
var modifiedSource = Session.Load<Code>(id);
modifiedSource.Id = "newId";
modifiedSource.Name = "new name";
Session.Update(modifiedSource);
trans.Commit();
}
Try ‘assigned’ id generator:
Or
From NHibernate doc