我想使用“等于”来检查我的数据库中的一个值是否与另一个给定值相同。不幸的是,NHbernate 不支持“Equals”,所以我在互联网上搜索并找到了这个教程: http: //www.primordialcode.com/blog/post/nhibernate-3-extending-linq-provider-fix-notsupportedexception
最后,我必须注册扩展 - 但我应该在哪个文件中注册?
编辑
也许我应该更好地描述我的问题......
情况:我有一个名为“GoodsType”的枚举。可能的值例如是“Iron”、“Wood”、“Stone”等。这个枚举用于“InventoryGoods”类中:
public class InventoryGoods: Goods
{
public virtual User Owner { get; set; }
public virtual Guid Id { get; set; }
public virtual long Amount { get; set; }
public virtual GoodsType GoodsType { get; set; }
public virtual float Price { get; set; }
}
如果用户想卖东西,我必须检查他是否有足够的这种特定商品。我为此检查创建了一个函数。这个函数能够自己找到实际的所有者(登录的用户),所以我只需要发送 GoodsType 和 Amount。但是如果我使用这个请求:InventoryGoods good = _repository.First(x => (Equals(x.GoodsType, GivenGoodsType)) && (x.Amount >= GivenAmount));
,脚本会停止并出现错误System.NotSupportedException: Boolean Equals(System.Object, System.Object)
我搜索了很多,在 SO 的某个地方(不幸的是我不记得链接)我发现 NHibernate 不支持“Equals”的语句(因为它不能转换为 SQL)。所以我搜索了一个解决方案,并找到了上面命名的教程。但是我找不到必须注册扩展名的文件。
我已经找到了这个解决方案:InventoryGoods good = _repository.First(x => x.Amount >= GivenAmount).Where(x => (Equals(x.GoodsType, GivenGoodsType)));
,但我更喜欢一种不通过“Where”进行双重检查的方法,只有“First”。
编辑 2
我正在使用 Fluent NHibernate 进行映射。