【发布时间】:2011-12-20 09:28:36
【问题描述】:
我的 C# 4 应用程序中有一个名为 Market 的对象:
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 代替。符号在数据库中是唯一的,我想返回一个市场对象。我正在尝试这段代码:
public Market GetMarketBySymbol(string symbol)
{
ISession session = GetSession();
return session.Get<Market>(symbol);
}
我知道这是错误的,但是有没有办法返回一个映射到数据库中唯一行但不通过 PK 检索它的对象?我可以简单地获取一个 <IList>of Market 对象,然后使用“foreach”返回那个对象,但这对我来说并不优雅。
【问题讨论】:
-
您不想使用 Criteria 或 HQL?
-
我愿意接受最优雅的解决方案。你会用什么?
标签: c# sql-server-2008 nhibernate c#-4.0