我在 NHibernate 中使用代码映射。我有一个有几个属性的类。其中之一与 DB 中的任何列都不相关,但仍然具有 getter 和 setter。
我使用 ConventionModelMapper 而不是 ModelMapper。第一个假设所有属性都已映射。
我如何告诉 NHibernate 忽略它?
我在 NHibernate 中使用代码映射。我有一个有几个属性的类。其中之一与 DB 中的任何列都不相关,但仍然具有 getter 和 setter。
我使用 ConventionModelMapper 而不是 ModelMapper。第一个假设所有属性都已映射。
我如何告诉 NHibernate 忽略它?
我发现创建一个属性、将该属性附加到属性并在 mapper.IsPersistentProperty 方法中检查它更容易。像这样的东西:
class IngnoreAttribute : Attribute
{
}
class Foo
{
[Ignore]
public virtual string Bar { get; set; }
}
mapper.IsPersistentProperty((mi, declared) => mi.GetCustomAttribute<IgnoreAttribute>() == null);
这样,我不必在映射代码中保留要忽略的属性列表。
为什么不映射您想要的属性并保留不需要映射的属性
检查这个
您可以按如下方式管理 ConventionModelMapper 的持久性:
mapper.BeforeMapProperty += (mi, propertyPath, map) =>
{
// Your code here using mi, propertyPath, and map to decide if you want to skip the property .. can check for property name and entity name if you want to ignore it
};
更好的答案是:
mapper.IsPersistentProperty((mi, declared) =>
{
if (mi.DeclaringType == typeof (YourType) && mi.Name == "PropertyNameToIgnore")
return false;
return true;
});
如果您没有提及在您的 NHibernate 映射中应该忽略的属性,NHibernate 将忽略它。