我正在使用 Fluent NHibernate (v. 1.3),我有两个实体:
public class MyObject
{
public virtual int Id { get; protected set; }
public virtual string Tag { get; set; }
public virtual List ListValue { get; set; }
}
public class List
{
public virtual int Id { get; protected set; }
public virtual string Name { get; set; }
}
映射如下所示:
public MyObjectMap()
{
Table("my_table");
Id(x => x.Id).Column("dtl_id").GeneratedBy.Native();
Map(x => x.Tag).Column("mfl_tag").Not.Nullable();
References<List>(x => x.ListValue).Column("lst_id").Nullable();
}
public ListMap()
{
Id(x => x.Id).Column("lst_id").GeneratedBy.Native();
Map(x => x.Name).Column("lst_name").Nullable().Length(50);
}
现在我想在 MyObject 上设置“lst_id”值(即 ListValue.Id)。
通常我只会将 ListValue 属性设置为 List 对象的一个实例,但在特定情况下我只有一个 Id。
我可以使用 Id 从数据库中获取 List 对象,但这似乎没有必要,因为我不想对列表对象本身做任何事情,我只想设置 lst_id 值并保存对象。
另一种选择是将 List 中 Id 的 setter 属性更改为 public 而不是 protected。然后我可以创建一个新的 List 实例,将 Id 设置为我想要的任何值并将其分配给 MyObject.ListValue。这也可以,但是感觉不对,因为 Id 是由数据库生成的,并且将 setter 设置为 protected 清楚地表明了这一点。
有第三种选择吗?