我的一个表的主键是一个字符串。字符串是我想在某个时间点更新的代码。我如何在nhibernate中做到这一点。 请注意有一个外键连接到这个列,我需要级联更新。如何使用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();
}
我只是创建一个新的对象,如果我是你。 – UpTheCreek
我没有让你? – Mulki
可能是一个糟糕的主意,要随时更改主键值。这是我书中更多的一次性手写脚本更新。 – dotjoe