NHibernate - 从多个数据库表映射实体

时间:2010-01-05 00:49:58

标签: nhibernate

是否可以映射来自不同数据库表的实体属性?假设你有以下数据模型......

[dbo.Albums]              [dbo.Songs]                [dbo.Artists]
AlbumID int (PK)          SongID int (PK)            ArtistID int (PK)
AlbumName nvarchar(100)   AlbumID int                ArtistName nvarchar(100)
.                         SongName nvarchar(50)      .
.                         Duration int               .
.                         ArtistID int               .
.                         .

必需实体:

public class Album
{
    public virtual int AlbumID { get; private set; }
    public virtual string AlbumName { get; set; }
    public List<Song> songs { get; set;}
}

public class Song
{
    public virtual int SongID { get; private set; }
    public virtual int AlbumID { get; set; }
    public virtual string SongTitle { get; set; }
    public virtual int Duration { get; set; }
    public virtual ArtistID { get; set; }
    public virtual ArtistName { get; private set; }      <- from different table, read only
}

我知道我应该创建一个Artists实体并将其附加到Song实体,但是如果Artists表有很多列,而我需要的只是ArtistName什么是在线上返回所有额外数据的重点不会被使用或更新?我只希望ArtistName仅用于显示目的。

谢谢,FJ

3 个答案:

答案 0 :(得分:1)

尝试Ayende's answer来解决您的问题,不确定该代码是否现在位于NHibernate的主干中,但它可以满足您的需求。

答案 1 :(得分:0)

在我看来,你应该有一个歌曲实体和一个艺术家实体。获取您需要的歌曲以及艺术家详细信息并创建歌曲DTO(数据传输对象)。

SongDTO将包含您需要的所有属性。

提取所需数据并组装SongDTO以推送电线。

答案 2 :(得分:0)

通过网络发送额外信息是没有用的,但你为什么担心呢?我怀疑你甚至可以在非批处理场景中使用它时测量差异。

“过早的性能优化是所有邪恶的根源”