c# - NHibernate POCO/基础知识

标签 c# nhibernate mapping poco

我以前使用过 L2S,现在正在考虑在一个项目中使用 NHib 和 Sharp Architecture。我已经开始制作原型(prototype)并遇到了第一个问题,我不知道如何用谷歌搜索。

给定一个具有一些简单属性和一个引用属性(类别 - 此处未显示的类)的 POCO:

public class Post
{
  public Post()
  {
    this.DateCreated = DateTime.Now;
  }

  public virtual string Title {get;set;}
  public virtual DateCreated {get;set;}
  public virtual Category {get;set;}
}

如果我想以表格格式生成帖子摘要,这很方便 - 如果我想要一个名为“Category”的列并且我想显示类别标题,我可以简单地使用 Post.Category.Title。

但是用户创建了一个新帖子(他们从下拉列表或类似列表中选择一个类别)。他们点击提交,我新建了一个 Post 对象。但是,在我可以保留新帖子之前,我必须检索类别的实例(通过 id)以分配给类别属性吗?

如何两全其美?如果我更新 Post POCO,使 Category 成为一个 int,那么创建新实例就变得更简单了。但是对于一些渲染代码来说更难了,现在必须解析给定 Id 的类别名称?

我觉得我在这里缺少一些基本概念?

我知道 Linq to Sql 给定一个模式,其中 Post 表有一个名为 CategoryId 的整数外键列,会为我生成基础表列 (CategoryId) 和包含外键行的 EntitySet。

如何在 NHibernate 中实现相似?这通常是如何管理的?

谢谢

最佳答案

关联实体应映射为实体 - 例如类别,不是int CategoryId

当您创建一个新的 Post 时,如果您没有实际的 Category 实例(为什么不呢?如果您从列表中选择类别你已经加载了它们)但只有它的 id 你可以使用 Load()获取给定 id 的持久类别实例的方法实际访问数据库:

post.Category = (Category) sesssion.Load(typeof(Category), categoryId);

您也可以使用通用版本:

post.Category = session.Load<Category>(categoryId);

关于c# - NHibernate POCO/基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1760050/

相关文章:

c# - 有使用SandcaSTLe生成API文档的快速入门指南吗?

c# - NHibernate QueryOver : How to join unrelated entities?

hibernate - Hibernate 3.0 中的条件映射?

C# 字符串操作 : From "TABLE_NAME" to "TableName"

c# - 图像大小调整导致文件大小比原始 C# 大得多

c# - NHibernate 和 INotifyPropertyChanged

NHibernate - 非法访问加载集合

ElasticSearch - 使用连字符搜索

ios - 我如何访问其他 Mappble 类对象的值。(Alamofire Object Mapper)

c# - Array.Sort() 对原始数组进行排序,而不仅仅是复制