Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Fluent NHiberNate ile inner Join sorunu

Konu, 'C#' kısmında bahtiyar_h tarafından paylaşıldı.

  1. bahtiyar_h

    bahtiyar_h Yeni Üye

    Kayıt:
    20 Kasım 2008
    Mesajlar:
    22
    Beğenilen Mesajlar:
    0
    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;
    }
    }
    }
    }