6fo*_*der 5 c# mapping nhibernate poco
我之前使用的是L2S,我正在考虑在项目中使用NHib和Sharp Architecture.我已经开始原型设计并遇到了第一个问题,我不知道如何谷歌.
给定一个具有一些简单属性的POCO和一个引用属性(Category - 类未在此处显示):
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;}
}
Run Code Online (Sandbox Code Playgroud)
如果我想以表格格式生成帖子摘要,这是很方便的 - 如果我想要一个名为"类别"的列,并且我想显示类别标题,我可以简单地使用Post.Category.Title.
但是,用户创建新帖子(他们从下拉列表或类似列表中选择一个类别).他们点击提交,然后我新建了一个Post对象.但是,在我可以持久保存新帖子之前,我必须检索一个Category(通过id)的实例来分配给Category属性?
如何充分利用这两个世界?如果我更新Post POCO,使Category成为int,我就更容易创建新实例.但是对于一些渲染代码来说更难,现在必须解析给定Id的类别名称?
我觉得我在这里缺少一些基本概念?
我知道Linq to Sql给出了一个模式,其中Post表有一个名为CategoryId的整数foriegn键列,它将生成基础表列(CategoryId)和包含外键行的EntitySet.
如何在NHibernate中实现类似的效果?这通常如何管理?
谢谢
关联的实体应该被映射为实体——例如Category,不是int CategoryId。
当你创建一个新的实例时Post,如果你没有实际的Category实例(为什么不呢?如果你从已经加载它们的列表中选择类别)但只有它的 id,你可以使用 Load ()方法获取给定 id 的持久类别实例,而无需实际访问数据库:
post.Category = (Category) sesssion.Load(typeof(Category), categoryId);
Run Code Online (Sandbox Code Playgroud)
您还可以使用通用版本:
post.Category = session.Load<Category>(categoryId);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3682 次 |
| 最近记录: |