[英]Enum flags with nhibernate / fluent
我正在使用nhibernate 3和流利的nhibernate
我有这个枚举
[Flags]
public enum Permission
{
View = 1,
Add = 2,
Edit = 4,
Delete = 8,
All = View | Add | Edit | Delete
}
现在说我想找到所有拥有“查看”或“全部”的用户。
我怎么能用nhibernate(linq)做到这一点?
session.Query<TableA>().Where x.Permission == Permission.View); // does not bring back all
session.Query<TableA>().Where x.Permission.HasFlag(Permission.View); // crashes
不得不去做这件事
session.Query<TableA>().Where x.Permission == Permission.View || x.Permission == Permission.All);
编辑
public class TableAMap : ClassMap<TableA>
{
public TableAMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Permission).Not.Nullable().CustomType<PermissionTypes>();
}
}
如果您的TableA类型具有以下映射:
public class TableAMap : ClassMap<TableA>
{
public TableAMap()
{
...
Map(x => x.Permission).CustomType(typeof(Permission)).Not.Nullable();
...
}
}
然后,您应该能够在存储库中或在执行数据访问的任何位置发出以下查询:
public IList<TableA> GetTableByPermission(Permission permission)
{
return Session.Query<TableA>
.Where(x => x.Permission == permission ||
x.Permission == Permission.All)
.ToList();
}
或者,您可以检查单个TableA实例是否已获得所需的权限:
public bool HasPermission(Guid guid, Permission permission)
{
var tableA = Session.Query<TableA>.SingleOrDefault(x => x.Id == guid);
if (tableA != null)
return (tableA.Permission & permission) == permission;
// Return false or whatever is appropriate.
return false;
}
你不能在查询中使用你的HasFlag()方法,NHibernate不了解如何在查询中使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.