Tất cả các đối tượng và đối tượng giá trị của tôi triển khai giao diện điểm đánh dấu IEntity
và IValueObject
. Tôi đã thiết lập chúng để được coi là các thành phần như vậy:Làm thế nào để tự động hóa một tập hợp các thành phần với Fluent NHibernate?
public override bool IsComponent(Type type)
{
return typeof(IValueObject).IsAssignableFrom(type);
}
public override bool ShouldMap(Type type)
{
return typeof(IEntity).IsAssignableFrom(type) || typeof(IValueObject).IsAssignableFrom(type);
}
Thật không may, điều này dường như không cho phép các thực thể có bộ sưu tập các đối tượng giá trị được tự động hóa làm bộ sưu tập thành phần. Ví dụ:
public class MyEntity : IEntity
{
public IList<MyValueObject> Objects { get; set; }
}
public class MyValueObject : IValueObject
{
public string Name { get; set; }
public string Value { get; set; }
}
Có cách nào để xác định một quy ước như vậy mà, bất cứ lúc nào một IEntity
có IList
của một loại mà thực hiện IValueObject
, nó được ánh xạ như thể tôi đã quy định:
HasMany(x => x.Objects)
.Component(x => {
x.Map(m => m.Name);
x.Map(m => m.Value);
});
Những gì tôi không muốn làm là phải tự làm các ghi đè này cho mỗi lớp và viết ra từng thuộc tính cho đối tượng giá trị một lần nữa và một lần nữa.