Câu hỏi của tôi là, có một bản đồ có thể Fluent NHibernate cho các đối tượng Parent và Child không yêu cầu đối tượng Child có thuộc tính Parent object không? Tôi đã không tìm ra cách ánh xạ tham chiếu trở lại với Phụ Huynh. Khi tôi gọi Create với ánh xạ như là, tôi nhận được một ngoại lệ vì đối tượng Child không có khóa ngoài yêu cầu (bắt buộc trong kho dữ liệu) trở lại Parent.Bản đồ chìa khóa nước ngoài trong Fluent NHibernate mà không có thuộc tính đối tượng
Tôi có hai lớp POCO:
public class Parent
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Child> Childs { get; set; }
}
public class Child
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int ParentId { get; set; }
}
Và một số ánh xạ:
public class ParentMap : ClassMap<Parent>
{
public ParentMap()
{
this.Table("Parents");
this.Id(x => x.Id);
this.Map(x => x.Name);
this.HasMany(x => x.Childs).KeyColumn("ChildId").Cascade.AllDeleteOrphan();
}
}
public class ChildMap : ClassMap<Child>
{
public ChildMap()
{
this.Table("Childs");
this.Id(x => x.Id);
this.Map(x => x.Name);
// Needs some sort of mapping back to the Parent for "Child.ParentId"
}
}
Và Tạo phương pháp:
public Parent Create(Parent t)
{
using (this.session.BeginTransaction())
{
this.session.Save(t);
this.session.Transaction.Commit();
}
return t;
}
Tôi muốn để có thể tạo ra một đối tượng phụ huynh mà có một danh sách các đối tượng con, nhưng không có các đối tượng con có tham chiếu trở lại cha mẹ của họ (khác với ID cha mẹ). Tôi muốn làm điều này để tránh tham chiếu vòng tròn từ Parent đến một danh sách Childs quay lại đối tượng Parent, vì nó gây ra các vấn đề với serialization JSON.
Đang ánh xạ thuộc tính cha mẹ (trong 'Con') sang trường riêng tư một tùy chọn? –
Đó là những gì tôi đang làm, mặc dù tôi đang cố gắng tránh nó vì tôi không thể chạy truy vấn trên thuộc tính 'ParentId'. Có vẻ như tôi sẽ có thể ánh xạ một thuộc tính với một ràng buộc khóa ngoài tới một cột mà không cần một đối tượng ... –
Trong trường hợp của câu hỏi ban đầu, câu trả lời của Felipe là chính xác. Không tuần tự hóa các thực thể trực tiếp, chuyển đổi chúng thành một DTO hoặc ViewModel đầu tiên, nhận được cấu trúc chính xác mà bạn muốn đầu tiên. –