我有以下我的域(和 FNH 映射)的摘录
public class Product
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IDictionary<LimSet, string> Attributes { get; set; }
/*equality logic there*/
}
public class LimSet
{
virtual public int Id { get; set; }
public virtual string Name { get; set; }
/*equality logic there*/
}
internal class LimSetMap : ClassMap<LimSet>
{
public LimSetMap()
{
Table("LIMSET");
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Name);
}
}
internal class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Table("PRODUCT");
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Name);
HasMany(x => x.Attributes)
.AsEntityMap("LIMSET_ID")
.Table("PRODUCT_ATTR")
.KeyColumn("PRODUCT_ID")
.Cascade.AllDeleteOrphan()
.Element("VALUE");
}
}
问题在于使用另一个实体作为键的组件的映射(字典)(到目前为止是简单的字符串值)。一切似乎都很好,例如我可以生成数据库模式,也可以操作字典并使用级联保存它。当我使用查询属性字典时
var prodWithAttrs = session.Query<Product>()
.Where(p => p.Id == 1)
.SelectMany(p => p.Attributes,
(p, a) => new
{
Product = p.Name,
Attribute = a.Key.Name,
Value = a.Value
});
我遇到了一个例外
cannot dereference scalar collection element: Key [.SelectMany[Domain.Product,System.Collections.Generic.KeyValuePair`2[...
我已经尝试了几个选项来改写查询但没有成功。您知道当前(3.3.2)NH Linq 提供程序是否可以实现这样的事情?
非常感谢