我的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);
}
我想做同样的事情,但转而使用符号。符号在数据库中是唯一的,我想返回一个Market对象。我正在尝试这段代码:
public Market GetMarketBySymbol(string symbol)
{
ISession session = GetSession();
return session.Get<Market>(symbol);
}
我知道这是错误的但是有没有办法返回一个映射到数据库中一个唯一行的对象,但不通过PK检索它?我可以简单地获得一个<IList>
市场对象,然后使用'foreach'返回一个,但这对我来说感觉不雅。
答案 0 :(得分:4)
如果您使用NH 3+,可以使用LINQ:
return session.Query<Market>().SingleOrDefault(w => w.Symbol == symbol);
或QueryOver:
return session.QueryOver<Market>()
.Where(w => w.Symbol == symbol).SingleOrDefault();