如何使组合键枚举在具有约定的fluent nhibernate中使用int?
我有一个复合键实体,其中一个属性是int,另一个是enum。枚举当前正在按字符串映射,但它必须是int。我有一个IUserTypeConvention,它已经做到了这一点,但它不适用于复合键 我有一个Accept()方法,它可以正确地定位包含枚举的组合键,但我无法理解Apply()代码 我只是不知道如何为复合密钥执行此操作 谢谢 就像我的另一个答案一样,只是经过深思熟虑如何使组合键枚举在具有约定的fluent nhibernate中使用int?,nhibernate,fluent-nhibernate,composite-key,Nhibernate,Fluent Nhibernate,Composite Key,我有一个复合键实体,其中一个属性是int,另一个是enum。枚举当前正在按字符串映射,但它必须是int。我有一个IUserTypeConvention,它已经做到了这一点,但它不适用于复合键 我有一个Accept()方法,它可以正确地定位包含枚举的组合键,但我无法理解Apply()代码 我只是不知道如何为复合密钥执行此操作 谢谢 就像我的另一个答案一样,只是经过深思熟虑 public class CompositeKeyEnumConvention : ICompositeIdentityCon
public class CompositeKeyEnumConvention : ICompositeIdentityConvention
{
public void Apply(ICompositeIdentityInstance instance)
{
// when instance.KeyProperties. Count == 0 nothing happens
foreach (IKeyPropertyInstance inspector in instance.KeyProperties)
{
if (inspector.Type.GenericArguments.Count() != 1)
continue;
if (EnumConvention.IsInt32EnumType(inspector.Type.GenericArguments.First()))
{
var keymapping = (KeyPropertyMapping)inspector.GetType()
.GetField("mapping", BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(inspector);
keymapping.Type = inspector.Type;
}
}
}
}
就像我的另一个答案一样,只是经过深思熟虑
public class CompositeKeyEnumConvention : ICompositeIdentityConvention
{
public void Apply(ICompositeIdentityInstance instance)
{
// when instance.KeyProperties. Count == 0 nothing happens
foreach (IKeyPropertyInstance inspector in instance.KeyProperties)
{
if (inspector.Type.GenericArguments.Count() != 1)
continue;
if (EnumConvention.IsInt32EnumType(inspector.Type.GenericArguments.First()))
{
var keymapping = (KeyPropertyMapping)inspector.GetType()
.GetField("mapping", BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(inspector);
keymapping.Type = inspector.Type;
}
}
}
}
我不得不将keymapping.Type行替换为:keymapping.Type=newtypereference(inspector.Type.genericalarguments.First());我不得不将keymapping.Type行替换为:keymapping.Type=newtypereference(inspector.Type.genericalarguments.First());
public class CompositeKeyEnumConvention : ICompositeIdentityConvention
{
public void Apply(ICompositeIdentityInstance instance)
{
// when instance.KeyProperties. Count == 0 nothing happens
foreach (IKeyPropertyInstance inspector in instance.KeyProperties)
{
if (inspector.Type.GenericArguments.Count() != 1)
continue;
if (EnumConvention.IsInt32EnumType(inspector.Type.GenericArguments.First()))
{
var keymapping = (KeyPropertyMapping)inspector.GetType()
.GetField("mapping", BindingFlags.GetField | BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(inspector);
keymapping.Type = inspector.Type;
}
}
}
}