c# - 在 Fluent NHibernate 中通过 ID 设置引用的实体

标签 c# .net nhibernate

我正在使用 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 ,这清楚地表明了这一点。

还有第三种选择吗?

最佳答案

尝试

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

这不会访问数据库。

关于c# - 在 Fluent NHibernate 中通过 ID 设置引用的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15132611/

相关文章:

c# - 在 NHibernate 中将实体设为只写

nhibernate - Fetch.Join() 在 Fluent NHibernate 中不起作用

c# - 如何在共享应用程序资源中实现导航按钮?

c# - 带有 urlencoded 字符的 System.Net.Uri

javascript - 在 Angular 中将对象数组传递给 POST

c# - c#读取word文件

.net - 更改表单不透明度而不更改容器控件的不透明度

c# - MongoDB 的推送和根在 C# 中的等效项是什么?

.net - 使用 F# 在 MySql 数据库中存储数据结构

NHibernate 由于数据库连接耗尽而超时