次のデータベース構造があります。
UserTeam table
Id (PK, int not null)
UserId (FK, int, not null)
TeamId (FK, int, not null)
RoleId (FK, int, not null)
libRole table
Id (PK, int not null)
Description (varchar(255), not null)
そして、次のようなエンティティがあります。
public class UserTeam
{
public int Id { get; set; }
public Team Team { get; set; }
public User User { get; set; }
public int RoleId { get; set; }
public string Role { get; set; }
}
Fluent NHibernate を使用し、自動的に NHibernate を構成しています (つまり、オーバーライドで Automapping クラスを使用しています)。
libRole テーブルの説明列だけを UserTeam テーブルの "Role" プロパティに取得しようとしていますが、本当に苦労しています。以下は、最も近いものです。
public class UserTeamMap : IAutoMappingOverride<UserTeam>
{
public void Override( FluentNHibernate.Automapping.AutoMapping<UserTeam> mapping )
{
mapping.References( m => m.User ).Column( "UserId" );
mapping.References( m => m.Team ).Column( "TeamId" );
mapping.Join("Role", join =>
{
join.Fetch.Join();
join.KeyColumn( "Id" );
join.Map( x => x.Role, "Description" );
} );
}
}
これにより、次の SQL が生成されます。
SELECT
TOP (@p0) this_.Id as Id70_0_,
this_.RoleId as RoleId70_0_,
this_.TeamId as TeamId70_0_,
this_.UserId as UserId70_0_,
this_1_.Description as Descript2_71_0_
FROM
[UserTeam] this_
inner join
libRole this_1_
on this_.Id=this_1_.Id;
閉じますが、NHibernate は結合で UserTeam テーブルと libRole テーブルの両方で Id 列を使用しています。this_.RoleId=this_1_.Id
何が欠けていますか?アプリケーション内に "libRole" エンティティを作成したくはありません。本当に気にかけているのは説明の値だけです。これはユーザーが構成できるため、列挙型だけを使用することもできません。誰でも助けることができますか?