Bagaimana cara memetakan kolom kunci asing di nhibernate?

Sebenarnya, pertanyaannya lebih kompleks daripada yang dijelaskan. Saya pemula di nhibernate dan saya ingin memetakan tabel dengan kolom kunci asing. Di sebagian besar sampel nhibernasi, penetapan kolom kunci asing umumnya diterapkan dengan mengatur entitas yang dirujuk. Maksud saya, jika saya memiliki kolom CategoryId maka saya memerlukan properti Kategori dan dalam sampel yang saya lihat, umumnya properti Kategori sedang disetel. Dalam kasus saya, saya tidak ingin mengatur properti entitas tetapi properti kunci asing.

public class Post
{
    public virtual long Id { get; set; };
    public virtual string Content { get; set; };
    public virtual long CategoryId { get; set; };
    public virtual Category Category { get; set; };
}

Saya tidak ingin mengatur properti kategori ketika saya mencoba menyimpan entitas Post seperti contoh di bawah ini.

Post post = new Post { Content = "content", Category = aCategoryEntity };
session.Save(post);

Contoh di bawah ini adalah cara yang ingin saya terapkan.

Post post = new Post { Content = "content", CategoryId = 3 };
session.Save(post);

Bagaimana cara menghilangkannya?


person Ali Ersöz    schedule 21.05.2009    source sumber
comment
Jika Anda masih mengalami kebuntuan, mengapa tidak memposting pemetaan Anda juga.   -  person Mark Dickinson    schedule 21.05.2009


Jawaban (3)


Session.Load adalah solusi yang saya gunakan di sini.

Post post = new Post 
{ 
   Content = "content", 
   Category = Session.Load<Category>(categoryId)
};

session.Save(post);
person Ali Ersöz    schedule 30.12.2009

Entitas Anda "Postingan", tidak memerlukan properti CategoryId dan Kategori.

Biasanya Anda juga akan memetakan Kategori, dan pemetaan Post Anda akan menghubungkan keduanya menggunakan kunci asing.

Anda bisa mencoba sesuatu seperti ini

session.Save(new Post(){ Category = new Category(){ Id = 3 } });

Semoga ini membantu.

person Mark Dickinson    schedule 21.05.2009
comment
Saran Anda ada dalam pikiran saya, tetapi saya sedang mencari solusi yang tepat untuk itu. Omong-omong, saya menggunakan fluent-nhibernate untuk pemetaan. Saya kira ada metode atau hal lain yang saya lewatkan yang dapat melakukan hal seperti itu. - person Ali Ersöz; 22.05.2009
comment
Anda perlu memikirkan jawaban Liam. Kode tidak memiliki cara untuk mengetahui apakah id kategori valid, sehingga akan melanggar kunci asing dan memunculkan pengecualian. - person Mark Dickinson; 22.05.2009
comment
Biasanya ketika Anda merasa sedang bekerja melawan suatu teknologi, itu karena memang Anda yang melakukannya. Jika Anda memiliki kesempatan untuk mendesain ulang sehingga Anda dapat bekerja dengan objek Kategori sebagai properti Post, ini akan menghemat banyak kerumitan. :) - person Mark Dickinson; 22.05.2009
comment
Saya memiliki rekan kerja untuk dibujuk. Dan saya melakukannya :) Berurusan dengan benda adalah cara yang tepat untuk menghilangkannya. - person Ali Ersöz; 22.05.2009

Saya tidak tahu apakah ini mungkin untuk NHibernate. Inti dari ORM adalah menangani objek, bukan kunci asing RDMS.

person liammclennan    schedule 21.05.2009
comment
Saya tahu, ini bukan praktik terbaik dan ini luar biasa untuk ORM tapi saya tetap membutuhkannya. - person Ali Ersöz; 22.05.2009