Hai teman-teman, saya mengalami beberapa masalah nyata dengan pemetaan menggunakan nhibernate yang lancar. Saya menyadari ada BANYAK postingan di situs ini dan banyak postingan lainnya yang berfokus pada jenis pemetaan tertentu, tetapi sampai saat ini, saya belum menemukan solusi yang dapat menyelesaikan masalah saya.
Inilah yang saya punya:
namespace MyProject.Models.Entites
{
public class Project
{
public virtual Guid Id {get; set;}
// A load of other properties
public virtual ProjectCatagory Catagory{get;set;}
}
}
dan kemudian peta:
namespace MyProject.DataAccess.ClassMappings
{
public class ProjectMap : ClassMap<Project>
{
public ProjectMap()
{
Id(x => x.Id);
Map(x => x.Title);
Map(x => x.Description);
Map(x => x.LastUpdated);
Map(x => x.ImageData).CustomSqlType("image");
HasOne(x => x.Catagory);
}
}
}
Jadi seperti yang Anda lihat, saya punya proyek yang berisi properti kategori. Saya tidak terlalu tertarik pada database relasional tetapi dari apa yang saya dapat bayangkan, ini adalah hubungan banyak-satu di mana banyak Proyek dapat memiliki satu kategori. Tidak, proyek tidak boleh masuk dalam lebih dari satu kategori.
Jadi sekarang kita punya:
namespace MyProject.Models.Entities
{
public class ProjectCatagory
{
public virtual Guid Id { get; set; }
public virtual String Name { get; set; }
}
}
dan petanya:
public ProjectCatagoryMap()
{
Id(x => x.Id);
Map(x => x.Name);
}
Masalahnya adalah, itu tidak berhasil! Saya akan melakukan sesuatu yang mirip dengan yang berikut ini dalam pengujian unit:
Project myproject = new Project("Project Description");
// set the other properties
myProject.Catagory = new ProjectCatagory(Guid.New(), "Test Catagory");
repository.Save(myProject);
Sekarang saya telah mencoba sejumlah konfigurasi pemetaan dan database ketika mencoba membuatnya berfungsi. Saat ini, tabel database Proyek memiliki kolom, "Catagory_id" (yang tidak saya letakkan di sana, saya berasumsi NH menambahkannya sebagai hasil pemetaan) dan saya ingin itu disetel agar tidak mengizinkan nol. Namun, ketika disetel seperti itu, saya mendapatkan pengecualian yang menjelaskan bahwa saya tidak dapat memasukkan nilai nol ke dalam tabel (walaupun selama debug, saya telah memeriksa semua properti pada objek Proyek dan BUKAN nol).
Atau, saya dapat mengizinkan tabel untuk menerima null ke dalam kolom itu dan itu hanya akan menyimpan objek Proyek dan sepenuhnya mengabaikan properti Kategori saat menyimpan, oleh karena itu, ketika diambil, tes untuk memeriksa apakah kategori yang tepat telah dikaitkan dengan proyek gagal .
Jika saya ingat dengan benar, pada satu titik saya menggunakan ProjectMap:
References(x => x.Catagory).Column("Catagory_id").Cascade.All().Not.Nullable();
ini mengubah pengecualian dari "Tidak dapat memasukkan nilai nol" menjadi pelanggaran kunci asing.
Saya menduga akar dari semua kerumitan ini berasal dari kurangnya pemahaman saya tentang pengaturan basis data relasional karena saya memiliki entitas lain dalam proyek ini yang tidak memiliki ketergantungan eksternal yang berfungsi baik dengan NHibernate, mengesampingkan masalah pengkodean apa pun yang mungkin saya sebabkan ketika membuat repositori.
Bantuan apa pun sangat dihargai. Terima kasih.