Fluent NHiberNate ile inner Join sorunu

Bu konuyu okuyanlar

bahtiyar_h

Öğrenci
Katılım
9 Ekim 2009
Mesajlar
9
Reaksiyon puanı
0
Puanları
1
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;
}
}
}
}
 
Üst