コンベンションを使用してパーツのコレクションをマッピングするにはどうすればよいですか?読み取り専用プロパティでアクセスしたコレクションをマップするにはどうすればよいですか?
私はこの大会を試してみましたが、それは常にアンダースコアの接頭辞なしでフィールド名を期待しpublic class Part
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class Car
{
private readonly List<Part> _parts = new List<Part>();
public virtual int Id { get; set; }
public virtual IList<Part> Parts
{
get { return _parts.AsReadOnly(); }
}
}
:
public class HasManyConvention : IHasManyConvention
{
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Access.ReadOnlyPropertyThroughCamelCaseField(CamelCasePrefix.Underscore);
}
}
私は同じ結果と1.2.0.694と2.0.0.698のビルドでそれを試してみました:
"Could not find field 'parts' in class 'TestFluentNHibernate.Car'"
"保護されたセットが" ではありませんPartsコレクションのプロパティを読み取り専用にします。外部クラスが別のコレクションへの参照を変更するのを防ぐだけです。読み取り専用にするには、新しいReadOnlyCollection(Parts)を返すか、IEnumerableを返します(本当に読み取り専用ではありませんが、APIコンシューマーには良い指示を与えます)。両方の方法の意味について詳しくは、SOを検索してください。これについては多数のスレッドがあります。 – Trygve
ところで、ちょうど_partsがメンバ変数の代わりに自動実装されたプロパティであることがわかりました。変更する必要があります – Trygve