Fluent NHiberNate ile inner Join sorunu

bahtiyar_h
06-02-2017, 23:51   |  #1  
bahtiyar_h avatarı
OP Taze Üye
Teşekkür Sayısı: 0
1 mesaj
Kayıt Tarihi:Kayıt: Şub 2017

Merhaba, İki tablodan oluşan basit bir yapım var.

SQL tabloları= Kategori(Id,Adi) ve Urun(Id,Adi,KategoriId)


Sorunum şu, Veritabanındaki tüm kayıtları GridControl ün içinde listeleyebiliyorum. Ancak "Urun" Tablosundaki "KategoriId" alanının yerine "Kategori" tablosundaki "Kategori adı" gelsin istiyorum. Inner Join ile rahat bir şekilde yapabiliyorum ancak. Fluent Nhibernate ile ilk defa yapmaya çalışıyorum ama bir türlü yapamadım. Yardımcı olur musunuz...

KategoriMap   Classım


using System.IO;
using FluentNHibernate.Mapping;
using MvcUrunYonetimiDemo1.Model;

namespace MvcUrunYonetimiDemo1.Mapping
{
   public class KategoriMap : ClassMap<Kategori>
   {
       public KategoriMap()
       {
           Id(x => x.Id);
           Map(x => x.Adi);

           
           HasMany(x => x.Urunler)
               .KeyColumns.Add()
               .Inverse()
               .Cascade.AllDeleteOrphan();

       }
   }
}


UrunMap  Classım


using FluentNHibernate.Mapping;
using MvcUrunYonetimiDemo1.Model;

namespace MvcUrunYonetimiDemo1.Mapping
{
   public class UrunMap : ClassMap<Urun>
   {
       public UrunMap()
       {
           
           Id(x => x.Id);
           Map(x => x.Adi);
           Map(x => x.Fiyat);
           Map(x => x.KategoriId);

           
           References(x => x.Kategori)
               .Column("KategoriId")
               .Not.Nullable();
       }
   }
}

Kategori   Class


using System.Collections.Generic;

namespace MvcUrunYonetimiDemo1.Model
{
   public class Kategori
   {
       public Kategori()
       {
           Urunler=new List<Urun>();
       }

       public Kategori(string adi) : this()
       {
           Adi = adi;
       }

       public virtual int Id { get; set; }
       public virtual string Adi { get; set; }
       public virtual IList<Urun> Urunler { get; set; }

       public virtual void UrunEkle(Urun urun)
       {
           Urunler.Add(urun);
           urun.Kategori = this;
       }

   }
}


Urun Classım


namespace MvcUrunYonetimiDemo1.Model
{
   public class Urun
   {
       public virtual int Id { get; set; }
       public virtual string Adi { get; set; }
       public virtual decimal Fiyat { get; set; }
       public virtual int KategoriId { get; set; }
       public virtual Kategori Kategori { get; set; }
   }
}


Form1.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using MvcUrunYonetimiDemo1.Model;
using NHibernate;
using NHibernate.Linq;

namespace MvcUrunYonetimiDemo1
{
   public partial class Form1 : Form
   {
       
       public Form1()
       {
           InitializeComponent();
       }

       private void Form1_Load(object sender, EventArgs e)
       {
           TreeListDoldur();
       }

       private static ISessionFactory SessionFactory
       {
           get
           {
               return
                   Fluently.Configure()
                       .Database(
                           MsSqlConfiguration.MsSql2012.ConnectionString(
                               x =>
                                   x.Server("SERVER\\SQLEXPRESS")
                                       .Database("UrunDB")
                                       .Username("sa")
                                       .Password("1234")))
                       .Mappings(x => x.FluentMappings.AddFromAssemblyOf<Form1>())
                       .BuildSessionFactory();
           }
       }

       private void btnEkle_Click(object sender, EventArgs e)
       {
           using (var sessionFactory = SessionFactory)
           using (var session = sessionFactory.OpenSession())
           using (var transaction = session.BeginTransaction()){

               
               var kategori = new Kategori(txtKategoriAdi.Text);
               kategori.UrunEkle(new Urun { Adi = txtUrunAdi.Text, Fiyat = Convert.ToDecimal(txtFiyat.Text) });

               session.Save(kategori);
               
               transaction.Commit();

               var tumUrunler = session.Query<Urun>().ToList();
               treeList1.DataSource = tumUrunler;
               gridControl1.DataSource = tumUrunler;

           }
           MessageBox.Show("Kayıt Başarılı.");
       }

       void TreeListDoldur()
       {
           using (var sessionFactory = SessionFactory)
           using (var session = sessionFactory.OpenSession())
           using (var transaction = session.BeginTransaction())
           {
               var tumUrunler = session.Query<Urun>().ToList();                
               treeList1.DataSource = tumUrunler;
               gridControl1.DataSource = tumUrunler;
           }
       }
   }
}