プロパティがNHibernate 3.2でマッピングされるのを回避する手段はありますか?デフォルトでは、すべてのプロパティがマップされます。コードによるマッピングを使用したプロパティのマッピングを無視する方法 "表記法"
答えて
二つのオプションは、私の知る限りがあります。
1)は、そのことをIsPersistentPropertyを拡張するためにConventionModelMapperとSimpleModelInspectorを拡張あなたの必要性を満たします。
...
mapper.IsPersistentProperty((memberInfo, declared) => IsPersistentProperty(mapper.ModelInspector, memberInfo, declared, "YourPropertyName"));
...
public static bool IsPersistentProperty(IModelInspector modelInspector, MemberInfo member, bool declared, string propertyName)
{
return (declared ||(member is PropertyInfo) && !IsReadOnlyProperty(member)) && !member.Name.Equals(propertyName);
}
private static bool IsReadOnlyProperty(MemberInfo subject)
{
const BindingFlags defaultBinding = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly;
var property = subject as PropertyInfo;
if (property == null)
{
return false;
}
if (CanReadCantWriteInsideType(property) || CanReadCantWriteInBaseType(property))
{
return !PropertyToField.DefaultStrategies.Values.Any(s => subject.DeclaringType.GetField(s.GetFieldName(property.Name), defaultBinding) != null) || IsAutoproperty(property);
}
return false;
}
private static bool IsAutoproperty(PropertyInfo property)
{
return property.ReflectedType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance
| BindingFlags.DeclaredOnly).Any(pi => pi.Name == string.Concat("<", property.Name, ">k__BackingField"));
}
private static bool CanReadCantWriteInsideType(PropertyInfo property)
{
return !property.CanWrite && property.CanRead && property.DeclaringType == property.ReflectedType;
}
private static bool CanReadCantWriteInBaseType(PropertyInfo property)
{
if (property.DeclaringType == property.ReflectedType)
{
return false;
}
var rfprop = property.DeclaringType.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance
| BindingFlags.DeclaredOnly).SingleOrDefault(pi => pi.Name == property.Name);
return rfprop != null && !rfprop.CanWrite && rfprop.CanRead;
}
1)動作させることができません:( –
重複:Ignore column using mapping by code in HNibernate
次を使用することができます。
mapper.IsPersistentProperty((mi, declared) =>
{
if (mi.DeclaringType == typeof (YourType) && mi.Name == "PropertyNameToIgnore")
return false;
return true;
});
いくつかのプロパティが無視される最も単純な例を提供できますか? BeforeMapPropertyハンドラ? – Newbie
回答を修正しました –
これは間違ったコードです。 YourTypeクラスの "PropertyNameToIgnore"を除くすべてのマップされたクラスのすべてのプロパティを永続化します。それらは読み込み専用であり、一度マッピングされたフィールドなどです。 –
2)IsPersistentPropertyのデフォルト実装の&ペーストをコピーする別の方法として、それは反射を介して再利用することができる:
var mapper = new ConventionModelMapper();
var field = mapper.ModelInspector.GetType()
.GetField("isPersistentProperty", BindingFlags.NonPublic | BindingFlags.Instance);
var ispp = (Func<MemberInfo, bool, bool>)field.GetValue(mapper.ModelInspector);
mapper.IsPersistentProperty((mi, b) => ispp(mi, b)
&& (/*any conditions here*/ mi.Name != "SomeFiledName"));
条件に移動することができ、以下のように
2)使用IsPersistentProperty別の方法またはクラス。式を基にした厳密に型指定されたラッパーをその上に置くことができます。
サンプルをどのように使用することができますか? – Paul
- 1. Mapster - nullプロパティのマッピングを無視する方法
- 2. 私のプロパティの規則を式を持つマッピングを無視する方法?
- 3. コードによるNHibernateマッピング:IDictionaryのマッピング方法?
- 4. マッピング順序を使用する方法
- 5. AutoMapperを使用して配列を複数のプロパティにマッピングする方法は?
- 6. NEST 2.0で特定のPOCOプロパティを無視/マッピングしない
- 7. Hibernateマッピングorder-by caseを無視する
- 8. NH3.2 'where'節を使用したコードによるマッピング
- 9. .NETコードを使用してExcelにXMLマッピングを追加する方法は?
- 10. EF 4.2最初に複合型にマッピングするコードで単一のプロパティを無視する
- 11. ジャクソンの列挙型フィールドを無視する方法JSONからオブジェクトへのマッピング?
- 12. マッピングのキーと値の両方をマッピングする方法は?
- 13. ObjectMapperを使用してこのJSONをマッピングする方法は?
- 14. MapStructはマッピングされていないプロパティを自動的に無視します
- 15. ドメインオブジェクトにラインをマッピングせずにspringbatchを使用する方法
- 16. json応答のマッピング時に不在のプロパティを無視します
- 17. Dapperを使用してMySQL JSON列をマッピングする方法
- 18. PHPを使用してカスタム配列をマッピングする方法は?
- 19. マッピングを動的にバインドするためにguice injectorを使用する方法
- 20. 使用するd3js-モデルのマッピングを視覚化する
- 21. jdbcデータをxsdにマッピングする方法
- 22. Nhibernateのコードによるマッピングで、access = "field.camelcase-underscore"を生成する方法は?
- 23. Automapper - ソースプロパティの子アイテムに基づくマッピングを無視する
- 24. マッピングでnot_analyzedは無視されます
- 25. を使用したマッピングR
- 26. Entity Framework 6でEnumプロパティをマッピングする方法
- 27. キーボードのキーを再マッピングする方法
- 28. 適切なマッピング文字列フィールドの長さ(コードによるマッピング)
- 29. 無視DomainModelからViewModelへのマッピング
- 30. マッピングされていないプロパティをDictionary/ExtensionDataにマッピングする
はい。マップしないでください。つまり、ClassMappingコードでProperty(x => x.MyProperty)に移動しないでください。 –
@ThilakNathen私は質問を更新しました。 – Newbie
現在、簡単な方法はありません。 [NH-2816](https://nhibernate.jira.com/browse/NH-2816) –