我有一個對象在我的C#叫Market
4應用:如何使用NHibernate不使用PK返回一個對象?
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);
}
我想要做同樣的事情,但在符號票代替。 Symbol在數據庫中是唯一的,我想返回一個Market對象。我想這樣的代碼:
public Market GetMarketBySymbol(string symbol)
{
ISession session = GetSession();
return session.Get<Market>(symbol);
}
我知道這是不對的,但有沒有辦法返回一個對象,它映射到一個獨特的行中的數據庫,但不通過 PK找回?我可以簡單地獲得Market對象的<IList>
,然後使用'foreach'返回該對象,但這對我來說感覺不合適。
你不想使用標準或HQL? – 2011-12-20 10:55:04
我接受最優雅的解決方案。你會用什麼? – 2011-12-20 12:34:41