Giả sử tôi có hai loại sau đây:Tránh xác định cột quan trọng trong việc tăng gấp đôi liên kết kịch bản
public class User : Entity
{
public virtual IList<Item> Items { get; set; }
}
public class Item : Entity
{
public virtual User Owner { get; set; }
}
Tôi tạo ra hai lớp bản đồ:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id);
HasMany(x => x.Items);
}
}
public class ItemMap : ClassMap<Item>
{
public ItemMap()
{
Id(x => x.Id);
References(x => x.Owner);
}
}
này sẽ cho kết quả trong một bảng Item
mà có một cột UserId
và một cột OwnerId
. Khi tôi sử dụng KeyColumn("OwnerId")
trên ánh xạ HasMany
, nó chỉ hoạt động với cột OwnerId
, nhưng tôi muốn tránh điều đó. Có cách nào để nói với NHibernate, sử dụng cột được tạo ra bởi ánh xạ trong ItemMap
?
Tại sao tôi muốn tránh chỉ định cột một cách rõ ràng:
Tên cột OwnerId
được tạo tự động dựa trên tên của thuộc tính và một số quy tắc. Nếu tôi thay đổi quy tắc hoặc tên thuộc tính, tôi cũng cần phải nhớ thay đổi điều đó là KeyColumn
. Vì vậy, về cơ bản, nó không phải là tái cấu trúc tiết kiệm.
Bạn có thể đổi tên thuộc tính thành Người dùng không? công cộng người dùng ảo {get; bộ; }. Bạn sẽ phải thay đổi ánh xạ tham chiếu của bạn quá tất nhiên –
@ColeW: Vâng, việc thay đổi thuộc tính thành Người dùng rõ ràng sẽ sửa lỗi đó, nhưng hơn tên của thuộc tính sẽ không tốt như bây giờ. –
Tôi đồng ý nhưng tôi không nghĩ rằng có cách làm sạch những gì bạn đang yêu cầu khác. –