【发布时间】:2011-08-29 18:21:29
【问题描述】:
我的一张表的主键是一个字符串。该字符串是我想在某个时间点更新的代码。我怎么能在休眠中做到这一点。 请注意,有一个外键连接到此列,我需要级联更新。
为了便于讨论,让我们假设我的映射如下
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();
}
【问题讨论】:
-
如果我是你,我只会创建一个新对象。
-
动态更改主键值可能是个坏主意。这更像是我书中的一次性手动脚本更新。
-
我第二个 dotjoe 和 @UpTheCreek:改变一个对象的 identity 意味着它不再是同一个对象。因此 - 创建一个新对象是有意义的。
-
我屈服于糟糕的设计...暂时不允许更新主键。
标签: .net nhibernate orm fluent-nhibernate