我最近开始使用NHibernate,并且在实现下面概述的域模型时遇到了一些麻烦.
我正在寻找的是一种过滤Item和它在特定DataStore上的ItemData集合之间关系的方法.DataStore是全局的,在这种情况下,它们总是返回,或者特定于用户身份(基于应用程序实例).
在SQL中,这可以使用简单的查询来完成:
SELECT * FROM Items i
INNER JOIN ItemData id ON (i.ItemId=id.ItemId)
LEFT OUTER JOIN Users u ON (id.UserId=u.UserId)
LEFT OUTER JOIN DataStore ds ON (id.DataStoreId=ds.DataStoreId)
WHERE ds.IsGlobal = 1 OR ds.UserId = @userId
Run Code Online (Sandbox Code Playgroud)
数据库结构:
DataStore:
- DataStoreId (PK)
- Name
- Weight
- UserId
- IsGlobal
Item:
- ItemId (PK)
- ... (non-nullable fields)
ItemData:
- ItemDataId (PK)
- ItemId
- DataStoreId
- ... (nullable fields)
Run Code Online (Sandbox Code Playgroud)
领域模型:
public class ItemMap : ClassMap<Item>
{
public ItemMap()
{
Id(x …Run Code Online (Sandbox Code Playgroud) nhibernate filtering nhibernate-mapping fluent-nhibernate nhibernate-criteria