2011-12-20 12 views
0

私はオブジェクトが私のC#4のアプリケーションでMarketと呼ばれるがあります。PKを使わずにNHibernateを使ってオブジェクトを返す方法は?

public class Market : BusinessBase 
{ 
    public Market() 
    { 
    } 

    public virtual int Id { get; set; } 
    public virtual string Symbol { get; set; } 
    public virtual string Description { get; set; } 
} 

私はSQL Serverでmarketsのテーブルを求めている:

CREATE TABLE [dbo].[markets](
    [marketId] [int] IDENTITY(1,1) NOT NULL, 
    [symbol] [varchar](10) NOT NULL, 
    [description] [varchar](30) NOT NULL, 
    [version] [int] NOT NULL, 
CONSTRAINT [PK_markets] PRIMARY KEY CLUSTERED 
    ([marketId] ASC) 
GO 
CREATE UNIQUE NONCLUSTERED INDEX [NIDX_markets_symbol] ON [dbo].[markets] ([symbol] ASC) 
GO 

私のマッピングファイルは、次のようになります。

<class name="MooDB.BusinessLayer.Market" table="markets"> 
    <id name="Id" column="marketId" type="Int32"> 
     <generator class="native" /> 
    </id>   
    <version name="Version" column="version" type="integer" unsaved-value="0" /> 
    <property name="Symbol" column="symbol" type="string" length="10" /> 
    <property name="Description" column="description" type="string" length="30" not-null="true" />   
</class> 

私は単純に、この方法を使って、Idでデータベースから市場を取得することができます。

public Market GetMarketById(int marketId) 
{ 
    ISession session = GetSession(); 
    return session.Get<Market>(marketId); 
} 

私は同じことをしたいが、代わりに記号を渡します。シンボルはデータベース内で一意に適用され、Marketオブジェクトを返す必要があります。私はこのコードをしようとしています:

public Market GetMarketBySymbol(string symbol) 
{ 
    ISession session = GetSession(); 
    return session.Get<Market>(symbol); 
} 

PKでそれを取得し、私はこれは間違っである知っているが、データベースに1つの一意の行にマップのオブジェクトを返す方法があるが、ない?私は単に市場オブジェクトの<IList>を取得し、それからちょうど 'foreach'を使用して1つを返すことができますが、それは私にとって不愉快であると感じます。

return session.Query<Market>().SingleOrDefault(w => w.Symbol == symbol); 

またはQueryOver:あなたはLINQを使用することができます3+あなたはNHを使用している場合

+0

あなたは、基準またはHQLを使用したくありませんか? –

+0

私は最も洗練されたソリューションを提供しています。何を使用しますか? –

答えて

4

return session.QueryOver<Market>() 
    .Where(w => w.Symbol == symbol).SingleOrDefault(); 
+0

ありがとう、 'QueryOver'は私が使ったメソッドです。 –

関連する問題