gpt4 book ai didi

c# - Fluent NHibernate (ASP.NET MVC) 中的枚举类型不匹配

转载 作者:太空狗 更新时间:2023-10-29 21:23:18 26 4
gpt4 key购买 nike

表格模型:

public class UserOwnerShip
{
public virtual int Id { get; set; }
public virtual User User { get; set; }
public virtual City City { get; set; }
public virtual Company Company { get; set; }
public virtual UserRole UserRole { get; set; }
public virtual DateTime RegistryDate { get; set; }
public virtual bool IsActive { get; set; }
}

映射:

internal class UserOwnerShipMap : ClassMap<UserOwnerShip>
{
public UserOwnerShipMap()
{
Id(x => x.Id);
Map(x => x.IsActive);
Map(x => x.UserRole).CustomType(typeof(int));
Map(x => x.RegistryDate);

References(x => x.User).Not.Nullable();
References(x => x.City).Nullable();
References(x => x.Company).Nullable();
}
}

我的 EnumConvention 类:

public class EnumConvention : IUserTypeConvention
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => x.Property.PropertyType.IsEnum ||
(x.Property.PropertyType.IsGenericType &&
x.Property.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) &&
x.Property.PropertyType.GetGenericArguments()[0].IsEnum)
);
}

public void Apply(IPropertyInstance target)
{
target.CustomType(target.Property.PropertyType);
}
}

和 UserRole 枚举

public enum UserRole
{
User,
Operator,
Manager,
Manager,
Admin
}

还有我的 nhibernate 配置部分:

....().Conventions.AddFromAssemblyOf<EnumConvention>())

所以当我查询时:

    IList<UserOwnerShip> userOwnerShip = session.QueryOver<UserOwnerShip>()
.Where(u => u.UserRole == UserRole.Owner)
.Where(u => u.IsActive)
.List<UserOwnerShip>();

我有异常:

Type mismatch in NHibernate.Criterion.SimpleExpression: UserRole expected type System.Int32, actual type XXX.XXX.UserRole (which is enum type class)

最佳答案

如果要存储枚举的 int 值,映射很简单:

Map(x => x.UserRole).CustomType<UserRole>();

不需要 EnumConvention。

关于c# - Fluent NHibernate (ASP.NET MVC) 中的枚举类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14329523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com