Первичным ключом для одной из моих таблиц является строка. Строка - это код, который я хотел бы обновить в какой-то момент времени. Как я могу сделать это в nhibernate.
Обратите внимание, что к этому столбцу подключен внешний ключ, к которому мне нужно каскадно обновлять.
Ради обсуждения предположим, что мое отображение такое, как показано ниже
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();
}
}
}
Структура стола
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))
вот код, который я использую для обновления моего объекта
using (var trans = Session.BeginTransaction())
{
var modifiedSource = Session.Load<Code>(id);
modifiedSource.Id = "newId";
modifiedSource.Name = "new name";
Session.Update(modifiedSource);
trans.Commit();
}