在Fluent NHibernate中通过ID设置引用实体

本文关键字:ID 设置 引用 实体 Fluent NHibernate | 更新日期: 2023-09-27 18:01:27

我使用的是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从数据库中获取列表对象,但这似乎没有必要,因为我不想对列表对象本身做任何事情,我只想设置lst_id值并保存对象。

另一个选择是将List中的Id的setter属性改为public而不是protected。然后我可以创建一个新的List实例,将Id设置为我想要的任何值,并将其分配给MyObject.ListValue。这也可以工作,但感觉不对,因为Id是由数据库生成的,并且将setter设置为protected清楚地显示了这一点。

有第三种选择吗?

在Fluent NHibernate中通过ID设置引用实体

Try

Model.List = session.Load<List>(yourid);

不访问数据库