Daha önceden LinqToSql ile yapmış olduğum sistemi Visual Studio 2010 kullanarak EntityFramework 4.0 a geçireyim dedim. Karşılaştığım birkaç problemi sizinle paylaşmak istiyorum.
Problem il ve ilçe seçimlerinde il dropdownlist inden seçilen ile göre ilçe dropdownlist indeki ilçeleri yükletirken altta belirttiğim hatayı almam. LinqToSql kodum şu şekilde
using (SiteContext site= new SiteContext ())
{
ddlIl.DataSource =site.tbl_il;
ddlIl.DataTextField = "il_ad";
ddlIl.DataValueField = "il_id";
ddlIl.DataBind();
ddlIl.Items.Insert(0, new ListItem("İl Seçiniz"));
}
il dropdownlistten seçilince yapılan işlemler;
protected void ddlIl_SelectedIndexChanged(object sender, EventArgs e)
{
using (SiteContext site= new SiteContext ())
{
if (ddlIl.SelectedIndex > 0)
{
ddlIlce.DataSource = site.tbl_ilces.Where(dd => dd.il_id == Convert.ToInt32(ddlIl.SelectedItem.Value));
ddlIlce.DataTextField = "ilce_ad";
ddlIlce.DataValueField = "ilce_id";
ddlIlce.DataBind();
ddlIlce.Items.Insert(0, new ListItem("İlçe Seçiniz"));
}
}
}
Burada bir sorunum yok linq te düzgün çalışıyor ancak entity framework te aşağıdakiki gibi denediğimde hata alıyorum
using (SiteEntity site= new SiteEntity())
{
ddlIl.DataSource = site.tbl_il;
ddlIl.DataTextField = "il_ad";
ddlIl.DataValueField = "il_id";
ddlIl.DataBind();
ddlIl.Items.Insert(0, new ListItem("İl Seçiniz"));
}
protected void ddlIl_SelectedIndexChanged(object sender, EventArgs e)
{
if (ddlIl.SelectedIndex > 0)
{
using (SiteEntity site= new SiteEntity())
{
ddlIlce.DataSource = site.tbl_ilce.Select(dd => dd.il_id == Convert.ToInt32(ddlIl.SelectedItem.Value));
ddlIlce.DataTextField = "ilce_ad";
ddlIlce.DataValueField = "ilce_id";
ddlIlce.DataBind();
ddlIlce.Items.Insert(0, new ListItem("İlçe Seçiniz"));
}
}
}
Hata : LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression.
Uzun araştırmalarım doğrultusunda il dropdownlistten gelecek olan verinin null olma ihtimaline karşı entity framewok önce cast işlemi sonra lambda ifadeleri iler where işlemini kabul ediyormuş yani çalışan kod aşağıdaki gibi
protected void ddlIl_SelectedIndexChanged(object sender, EventArgs e)
{
using (SiteEntity site = new SiteEntity())
{
int geciciDeger= Convert.ToInt32(ddlIl.SelectedItem.Value.ToString());
ddlIlce.DataSource = site.tbl_ilce.Where(dd=>dd.il_id==geciciDeger);
ddlIlce.DataTextField = "ilce_ad";
ddlIlce.DataValueField = "ilce_id";
ddlIlce.DataBind();
}
}

