PDA

View Full Version : مشکل در ذخیره اطلاعات به کمک entity



wolf_majid
دوشنبه 05 خرداد 1393, 11:51 صبح
سلام
دو عکس زیر رو نگاه کنید
http://dc594.4shared.com/img/gnByH9bqba/s3/14637806988/01__2_.png

http://dc594.4shared.com/img/-IhMMyvbba/s3/14637807540/02_online.png

چرا بعد از عملیات ذخیره باز هم اطلاعات ذخیره نشده ؟
ممنون میشم راهنمایی کنید

ashkan1234
دوشنبه 05 خرداد 1393, 14:26 عصر
کد ذخیره سازی رو بطور کامل اینجا قرار بدید تا بررسی شود!

wolf_majid
دوشنبه 05 خرداد 1393, 15:37 عصر
اول کد بصورت کامل بایندینگ بود
بعد از اینکه دیدم ذخیره نمیکنه به صورت زیر در آوردم اما بازم ذخیره نمی کنه

private void btnSave_Click(object sender, EventArgs e)
{
if ((chkOnlyPerson.Checked || _loadMode == LoadMode.InsertPerson))
{
if (!string.IsNullOrEmpty(nationalCodeTextBox.Text.Tr im()))
{
if (errorProvider1 != null)
errorProvider1.Clear();

if (!_context.People.Any(x => x.NationalCode.Equals(nationalCodeTextBox.Text.Tri m())))
{
var sex = sexComboBox.Text == "زن";
var person = new Person
{
Birthday = birthdayMaskedTextBox.Text,
Cellphone = cellphoneTextBox.Text,
Email = emailTextBox.Text,
FatherName = fatherNameTextBox.Text,
Name = nameTextBox.Text,
NationalCode = nationalCodeTextBox.Text,
ShenasnamehCode = shenasnamehCodeTextBox.Text,
ShenasnamehSerial = shenasnamehSerialTextBox.Text,
Sex = sex
};
_context.People.Add(person);
}
_context.SaveChanges();
MessageBox.Show("شخص ذخیره شد");
}
else
{
errorProvider1.SetError(nationalCodeTextBox, "این فیلد الزامی است");
// if (tabControl1.SelectedTab == tabPerson) return;
}
if (chkOnlyPerson.Checked)
return;
}

var pc = (PersonAndCompany) personAndComapnyBindingSource.Current;
if (pc == null)
return;

if (tabControl1.SelectedTab == tabHaghighi)
{
if (string.IsNullOrEmpty(postalCodeFieldTextBox_Haghi ghi.Text))
{
if (errorProvider1 != null)
{
errorProvider1.SetError(postalCodeFieldTextBox_Hag highi, "این فیلد باید مقدار داشته باشد");
return;
}
}
if (errorProvider1 != null)
errorProvider1.Clear();

var v = (HaghighiCompany)haghighiCompanyBindingSource.Curr ent;
if (!v.City_Id.HasValue)
v.City_Id = Program.EsfahanCode;

_context.SaveChanges();

v = _context.HaghighiCompanies.Single(x => x.PostalCode.Equals(v.PostalCode));

pc.HaghighiCompany = v;
if (_loadMode == LoadMode.InsertCompaniesData || _loadMode == LoadMode.InsertAll)
pc.IsOurCustomer = true;
}
else if (tabControl1.SelectedTab == tabHoghooghi)
{
if (string.IsNullOrEmpty(nationalCodeTextBox_Hoghoogh i.Text))
{
if (errorProvider1 != null)
{
errorProvider1.SetError(nationalCodeTextBox_Hoghoo ghi, "این فیلد باید مقدار داشته باشد");
return;
}
}
if (errorProvider1 != null)
errorProvider1.Clear();
var v = (HoghooghiCompany)hoghooghiCompanyBindingSource.Cu rrent;
if (
!_context.HoghooghiCompanies.Any(
x => x.NationalCode.Equals(nationalCodeTextBox_Hoghoogh i.Text.Trim())))
{
byte nerkheHagheBimeh;
byte.TryParse(nerkheHagheBimehTextBox_Hoghooghi.Te xt, out nerkheHagheBimeh);
var hoghooghi = new HoghooghiCompany
{
Address = AddressText_Hoghooghi.Text,
ArzeshAfzoode_Id = v.ArzeshAfzoode_Id,//(int?) ArzeshAfzoodeCombo_Hoghooghi.SelectedValue,
City_Id =v.City_Id,// (decimal?) CityCombo_hoghooghi.SelectedValue,
ClasseParvande = classeParvandeTextBox_Hoghooghi.Text,
CodeBimeh = codeBimehTextBox_Hoghooghi.Text,
CodeVahedeMaliati = codeVahedeMaliatiTextBox_Hoghooghi.Text,
Country = "ایران",
EdareKol_Id =v.EdareKol_Id,// (short?) EdareKolCombo_Hoghooghi.SelectedValue,
EvatPassword = passArzeshAfzoodeLabel_Hoghooghi.Text,
EvatRahgiri = codeRahgiriCodeEghtesadiTextBox_Hoghooghi.Text,
EvatUsernane = UsernameArzeshAfzoodeTextbox_Hoghooghi.Text,
FaxCode = FaxCodeText_Hoghooghi.Text,
FaxNum = FaxNumText_Hoghooghi.Text,
HoghooghiType_Id =v.HoghooghiType_Id,// (int?) HoghooghiTypeCombo.SelectedValue,
Name = nameTextBox_Hoghooghi.Text,
NationalCode = nationalCodeTextBox_Hoghooghi.Text,
NerkheHagheBimeh = nerkheHagheBimeh,
NewEconomicNoField = newEconomicNoFieldTextBox_Hoghooghi.Text,
OldEconomicNoField = oldEconomicNoFieldTextBox_Hoghooghi.Text,
PostalCode = postalCodeTextBox_Hoghooghi.Text,
ShomareSabt = shomareSabtTextBox_Hoghooghi.Text,
TarikheSabt = tarikheSabtMaskedTextBox_Hoghooghi.Text,
TaxPassworde = taxPasswordeTextBox_Hoghooghi.Text,
TaxRahgiri = codeRahgiriCodeEghtesadiTextBox_Hoghooghi.Text,
TaxSabteNamStatus =v.TaxSabteNamStatus,// (byte?) SabteNamCombo_Hoghooghi.SelectedValue,
TaxUserame = UsernameTextbox_Hoghooghi.Text,
TellCode = TellcodeText_Hoghooghi.Text,
TellNum = TellNumText_Hoghooghi.Text
};
_context.HoghooghiCompanies.Add(hoghooghi);
}
else
{
byte nerkheHagheBimeh;
byte.TryParse(nerkheHagheBimehTextBox_Hoghooghi.Te xt, out nerkheHagheBimeh);
var hoghooghi = _context.HoghooghiCompanies.Single(
x => x.NationalCode.Equals(nationalCodeTextBox_Hoghoogh i.Text.Trim()));
hoghooghi.Address = AddressText_Hoghooghi.Text;
hoghooghi.ArzeshAfzoode_Id = v.ArzeshAfzoode_Id;// (int?) ArzeshAfzoodeCombo_Hoghooghi.SelectedValue;
hoghooghi.City_Id = v.City_Id;// (decimal?) CityCombo_hoghooghi.SelectedValue;
hoghooghi.ClasseParvande = classeParvandeTextBox_Hoghooghi.Text;
hoghooghi.CodeBimeh = codeBimehTextBox_Hoghooghi.Text;
hoghooghi.CodeVahedeMaliati = codeVahedeMaliatiTextBox_Hoghooghi.Text;
hoghooghi.Country = "ایران";
hoghooghi.EdareKol_Id = v.EdareKol_Id;// (short?) EdareKolCombo_Hoghooghi.SelectedValue;
hoghooghi.EvatPassword = passArzeshAfzoodeLabel_Hoghooghi.Text;
hoghooghi.EvatRahgiri = codeRahgiriCodeEghtesadiTextBox_Hoghooghi.Text;
hoghooghi.EvatUsernane = UsernameArzeshAfzoodeTextbox_Hoghooghi.Text;
hoghooghi.FaxCode = FaxCodeText_Hoghooghi.Text;
hoghooghi.FaxNum = FaxNumText_Hoghooghi.Text;
hoghooghi.HoghooghiType_Id = v.HoghooghiType_Id;// (int?) HoghooghiTypeCombo.SelectedValue;
hoghooghi.Name = nameTextBox_Hoghooghi.Text;
hoghooghi.NationalCode = nationalCodeTextBox_Hoghooghi.Text;
hoghooghi.NerkheHagheBimeh = nerkheHagheBimeh;
hoghooghi.NewEconomicNoField = newEconomicNoFieldTextBox_Hoghooghi.Text;
hoghooghi.OldEconomicNoField = oldEconomicNoFieldTextBox_Hoghooghi.Text;
hoghooghi.PostalCode = postalCodeTextBox_Hoghooghi.Text;
hoghooghi.ShomareSabt = shomareSabtTextBox_Hoghooghi.Text;
hoghooghi.TarikheSabt = tarikheSabtMaskedTextBox_Hoghooghi.Text;
hoghooghi.TaxPassworde = taxPasswordeTextBox_Hoghooghi.Text;
hoghooghi.TaxRahgiri = codeRahgiriCodeEghtesadiTextBox_Hoghooghi.Text;
hoghooghi.TaxSabteNamStatus = v.TaxSabteNamStatus;// (byte?) SabteNamCombo_Hoghooghi.SelectedValue;
hoghooghi.TaxUserame = UsernameTextbox_Hoghooghi.Text;
hoghooghi.TellCode = TellcodeText_Hoghooghi.Text;
hoghooghi.TellNum = TellNumText_Hoghooghi.Text;
}

//***************************
hoghooghiCompanyBindingSource.EndEdit();
_context.SaveChanges();
//***************************

var vHoghooghi =
_context.HoghooghiCompanies.Single(x => x.NationalCode.Equals(nationalCodeTextBox_Hoghoogh i.Text));
pc.HoghooghiCompany_Id = vHoghooghi.Id;
pc.HoghooghiCompany = vHoghooghi;
pc.IsOurCustomer = true;

if (_loadMode == LoadMode.InsertPerson)
{
if (!string.IsNullOrEmpty(nationalCodeTextBox.Text.Tr im()))
{
var person =
_context.People.FirstOrDefault(x => x.NationalCode == nationalCodeTextBox.Text.Trim());
if (person != null)
{
pc.Person = person;
}
}
}

}

personAndComapnyBindingSource.EndEdit();
pc = (PersonAndCompany) personAndComapnyBindingSource.Current;

_context.SaveChanges();
var personId = pc.Person_Id;
var companyId = pc.HoghooghiCompany_Id;

var havePc =

_context.PersonAndCompanies.FirstOrDefault(
x => x.Person_Id == personId && x.HoghooghiCompany_Id == companyId);


MessageBox.Show("عملیات با موفقیت انجام شد");
}

ashkan1234
دوشنبه 05 خرداد 1393, 16:41 عصر
فیلد Id توی جدولت رو چک کن ببین بصورت AutoNumber و Primary هست یا خیر؟
اگر نیست پس چجوری بهش مقدار میدی؟
چون توی عکسی که قرار دادی مقدار Id=0 هستش!
اینو چک کن ببین مشکل حل میشه؟!
و اینکه بهتره Id رو بصورت AutoNumber در بیاری!

wolf_majid
سه شنبه 06 خرداد 1393, 09:05 صبح
ممنون از پاسختون
فیلد Id توی تمام جداولم Identity و Primary Key ئه (به جز جدول Person که کد ملی کلیده)
دلیل 0 بودن Id هم فکر میکنم اینه که هنوز ثبت نشده

wolf_majid
سه شنبه 06 خرداد 1393, 09:41 صبح
فهمیدم مشکل از کجا بود
نمیدونم کد اضافه کردن شخص شرکت رو حذف کرده بودم یا یادم رفته بود (توی تغییر بایندینگ)
با حالت بایند هم تست میکنم اگر مشکل داشت همینجا اعلام میکنم

ممنون از آقا اشکان

private void btnSave_Click(object sender, EventArgs e)
{
if ((chkOnlyPerson.Checked || _loadMode == LoadMode.InsertPerson))
{
if (!string.IsNullOrEmpty(nationalCodeTextBox.Text.Tr im()))
{
if (errorProvider1 != null)
errorProvider1.Clear();

if (!_context.People.Any(x => x.NationalCode.Equals(nationalCodeTextBox.Text.Tri m())))
{
var sex = sexComboBox.Text == "زن";
var person = new Person
{
Birthday = birthdayMaskedTextBox.Text,
Cellphone = cellphoneTextBox.Text,
Email = emailTextBox.Text,
FatherName = fatherNameTextBox.Text,
Name = nameTextBox.Text,
NationalCode = nationalCodeTextBox.Text,
ShenasnamehCode = shenasnamehCodeTextBox.Text,
ShenasnamehSerial = shenasnamehSerialTextBox.Text,
Sex = sex
};
_context.People.Add(person);
}
_context.SaveChanges();
MessageBox.Show("شخص ذخيره شد");
}
else
{
errorProvider1.SetError(nationalCodeTextBox, "اين فيلد الزامي است");
// if (tabControl1.SelectedTab == tabPerson) return;
}
if (chkOnlyPerson.Checked)
return;
}

var pc = (PersonAndCompany)personAndComapnyBindingSource.Cu rrent;
if (pc == null)
return;

if (tabControl1.SelectedTab == tabHaghighi)
{
if (string.IsNullOrEmpty(postalCodeFieldTextBox_Haghi ghi.Text))
{
if (errorProvider1 != null)
{
errorProvider1.SetError(postalCodeFieldTextBox_Hag highi, "اين فيلد بايد مقدار داشته باشد");
return;
}
}
if (errorProvider1 != null)
errorProvider1.Clear();

var v = (HaghighiCompany)haghighiCompanyBindingSource.Curr ent;
if (!v.City_Id.HasValue)
v.City_Id = Program.EsfahanCode;

_context.SaveChanges();

v = _context.HaghighiCompanies.Single(x => x.PostalCode.Equals(v.PostalCode));

pc.HaghighiCompany = v;
if (_loadMode == LoadMode.InsertCompaniesData || _loadMode == LoadMode.InsertAll)
pc.IsOurCustomer = true;

var compId = pc.HaghighiCompany_Id;

if (
!_context.PersonAndCompanies.Any(
x =>
x.Person_Id.Equals(nationalCodeTextBox.Text.Trim() ) && x.HaghighiOrHoghooghi.HasValue &&
x.HaghighiOrHoghooghi == 1 && x.HaghighiCompany_Id.Equals(compId)))
{
//.................................................. ..................................
_context.PersonAndCompanies.Add(pc);
//.................................................. ..................................
}
}
else if (tabControl1.SelectedTab == tabHoghooghi)
{
if (string.IsNullOrEmpty(nationalCodeTextBox_Hoghoogh i.Text))
{
if (errorProvider1 != null)
{
errorProvider1.SetError(nationalCodeTextBox_Hoghoo ghi, "اين فيلد بايد مقدار داشته باشد");
return;
}
}
if (errorProvider1 != null)
errorProvider1.Clear();
var v = (HoghooghiCompany)hoghooghiCompanyBindingSource.Cu rrent;
if (
!_context.HoghooghiCompanies.Any(
x => x.NationalCode.Equals(nationalCodeTextBox_Hoghoogh i.Text.Trim())))
{
byte nerkheHagheBimeh;
byte.TryParse(nerkheHagheBimehTextBox_Hoghooghi.Te xt, out nerkheHagheBimeh);
var hoghooghi = new HoghooghiCompany
{
Address = AddressText_Hoghooghi.Text,
ArzeshAfzoode_Id = v.ArzeshAfzoode_Id, //(int?) ArzeshAfzoodeCombo_Hoghooghi.SelectedValue,
City_Id = v.City_Id, // (decimal?) CityCombo_hoghooghi.SelectedValue,
ClasseParvande = classeParvandeTextBox_Hoghooghi.Text,
CodeBimeh = codeBimehTextBox_Hoghooghi.Text,
CodeVahedeMaliati = codeVahedeMaliatiTextBox_Hoghooghi.Text,
Country = "ايران",
EdareKol_Id = v.EdareKol_Id, // (short?) EdareKolCombo_Hoghooghi.SelectedValue,
EvatPassword = passArzeshAfzoodeLabel_Hoghooghi.Text,
EvatRahgiri = codeRahgiriCodeEghtesadiTextBox_Hoghooghi.Text,
EvatUsernane = UsernameArzeshAfzoodeTextbox_Hoghooghi.Text,
FaxCode = FaxCodeText_Hoghooghi.Text,
FaxNum = FaxNumText_Hoghooghi.Text,
HoghooghiType_Id = v.HoghooghiType_Id, // (int?) HoghooghiTypeCombo.SelectedValue,
Name = nameTextBox_Hoghooghi.Text,
NationalCode = nationalCodeTextBox_Hoghooghi.Text,
NerkheHagheBimeh = nerkheHagheBimeh,
NewEconomicNoField = newEconomicNoFieldTextBox_Hoghooghi.Text,
OldEconomicNoField = oldEconomicNoFieldTextBox_Hoghooghi.Text,
PostalCode = postalCodeTextBox_Hoghooghi.Text,
ShomareSabt = shomareSabtTextBox_Hoghooghi.Text,
TarikheSabt = tarikheSabtMaskedTextBox_Hoghooghi.Text,
TaxPassworde = taxPasswordeTextBox_Hoghooghi.Text,
TaxRahgiri = codeRahgiriCodeEghtesadiTextBox_Hoghooghi.Text,
TaxSabteNamStatus = v.TaxSabteNamStatus, // (byte?) SabteNamCombo_Hoghooghi.SelectedValue,
TaxUserame = UsernameTextbox_Hoghooghi.Text,
TellCode = TellcodeText_Hoghooghi.Text,
TellNum = TellNumText_Hoghooghi.Text
};
_context.HoghooghiCompanies.Add(hoghooghi);
}
else
{
byte nerkheHagheBimeh;
byte.TryParse(nerkheHagheBimehTextBox_Hoghooghi.Te xt, out nerkheHagheBimeh);
var hoghooghi = _context.HoghooghiCompanies.Single(
x => x.NationalCode.Equals(nationalCodeTextBox_Hoghoogh i.Text.Trim()));
hoghooghi.Address = AddressText_Hoghooghi.Text;
hoghooghi.ArzeshAfzoode_Id = v.ArzeshAfzoode_Id;
// (int?) ArzeshAfzoodeCombo_Hoghooghi.SelectedValue;
hoghooghi.City_Id = v.City_Id; // (decimal?) CityCombo_hoghooghi.SelectedValue;
hoghooghi.ClasseParvande = classeParvandeTextBox_Hoghooghi.Text;
hoghooghi.CodeBimeh = codeBimehTextBox_Hoghooghi.Text;
hoghooghi.CodeVahedeMaliati = codeVahedeMaliatiTextBox_Hoghooghi.Text;
hoghooghi.Country = "ايران";
hoghooghi.EdareKol_Id = v.EdareKol_Id; // (short?) EdareKolCombo_Hoghooghi.SelectedValue;
hoghooghi.EvatPassword = passArzeshAfzoodeLabel_Hoghooghi.Text;
hoghooghi.EvatRahgiri = codeRahgiriCodeEghtesadiTextBox_Hoghooghi.Text;
hoghooghi.EvatUsernane = UsernameArzeshAfzoodeTextbox_Hoghooghi.Text;
hoghooghi.FaxCode = FaxCodeText_Hoghooghi.Text;
hoghooghi.FaxNum = FaxNumText_Hoghooghi.Text;
hoghooghi.HoghooghiType_Id = v.HoghooghiType_Id; // (int?) HoghooghiTypeCombo.SelectedValue;
hoghooghi.Name = nameTextBox_Hoghooghi.Text;
hoghooghi.NationalCode = nationalCodeTextBox_Hoghooghi.Text;
hoghooghi.NerkheHagheBimeh = nerkheHagheBimeh;
hoghooghi.NewEconomicNoField = newEconomicNoFieldTextBox_Hoghooghi.Text;
hoghooghi.OldEconomicNoField = oldEconomicNoFieldTextBox_Hoghooghi.Text;
hoghooghi.PostalCode = postalCodeTextBox_Hoghooghi.Text;
hoghooghi.ShomareSabt = shomareSabtTextBox_Hoghooghi.Text;
hoghooghi.TarikheSabt = tarikheSabtMaskedTextBox_Hoghooghi.Text;
hoghooghi.TaxPassworde = taxPasswordeTextBox_Hoghooghi.Text;
hoghooghi.TaxRahgiri = codeRahgiriCodeEghtesadiTextBox_Hoghooghi.Text;
hoghooghi.TaxSabteNamStatus = v.TaxSabteNamStatus; // (byte?) SabteNamCombo_Hoghooghi.SelectedValue;
hoghooghi.TaxUserame = UsernameTextbox_Hoghooghi.Text;
hoghooghi.TellCode = TellcodeText_Hoghooghi.Text;
hoghooghi.TellNum = TellNumText_Hoghooghi.Text;
}

_context.SaveChanges();


var vHoghooghi =
_context.HoghooghiCompanies.Single(x => x.NationalCode.Equals(nationalCodeTextBox_Hoghoogh i.Text));
pc.HoghooghiCompany_Id = vHoghooghi.Id;
pc.HoghooghiCompany = vHoghooghi;
pc.IsOurCustomer = true;

if (_loadMode == LoadMode.InsertPerson)
{
if (!string.IsNullOrEmpty(nationalCodeTextBox.Text.Tr im()))
{
var person =
_context.People.FirstOrDefault(x => x.NationalCode == nationalCodeTextBox.Text.Trim());
if (person != null)
{
pc.Person = person;
}
}
}

var haOrHo = pc.HaghighiOrHoghooghi ?? 2;
var compId = pc.HoghooghiCompany_Id ?? -1;

if (
!_context.PersonAndCompanies.Any(
x =>
x.HaghighiOrHoghooghi.HasValue && x.HaghighiOrHoghooghi == haOrHo &&
x.HoghooghiCompany_Id.HasValue && x.HoghooghiCompany_Id==compId))
{
//.................................................. ..................................
_context.PersonAndCompanies.Add(pc);
//.................................................. ..................................
}

}
_context.SaveChanges();

MessageBox.Show("عمليات با موفقيت انجام شد");
}

wolf_majid
سه شنبه 06 خرداد 1393, 14:03 عصر
کد رو بصورت زیر اصلاح کردم
اما باز هم عملیات ذخیره صورت نمی پذیره
مگه نباید موقعی که Bindingsource رو AddNew میکنیم توی بانک ثبتش کنه؟

private void btnSave_Click(object sender, EventArgs e)
{
if ((chkOnlyPerson.Checked || _loadMode == LoadMode.InsertPerson))
{
if (!string.IsNullOrEmpty(nationalCodeTextBox.Text.Tr im()))
{
if (errorProvider1 != null)
errorProvider1.Clear();
//************************************************** *******
personBindingSource.EndEdit();
var sex = sexComboBox.Text == "زن";
var person = (Person) personBindingSource.Current;
person.Sex = sex;
//************************************************** *******
_context.SaveChanges();
MessageBox.Show("شخص ذخیره شد");
}
else
{
errorProvider1.SetError(nationalCodeTextBox, "این فیلد الزامی است");
}
if (chkOnlyPerson.Checked)
return;
}


var pc = (PersonAndCompany) personAndComapnyBindingSource.Current;
if (pc == null)
return;

if (tabControl1.SelectedTab == tabHaghighi)
{
if (string.IsNullOrEmpty(postalCodeFieldTextBox_Haghi ghi.Text))
{
if (errorProvider1 != null)
{
errorProvider1.SetError(postalCodeFieldTextBox_Hag highi, "این فیلد باید مقدار داشته باشد");
return;
}
}
if (errorProvider1 != null)
errorProvider1.Clear();

var haghighi = (HaghighiCompany)haghighiCompanyBindingSource.Curr ent;
if (!haghighi.City_Id.HasValue)
haghighi.City_Id = Program.EsfahanCode;

haghighiCompanyBindingSource.EndEdit();
_context.SaveChanges();
// v = _context.HaghighiCompanies.Single(x => x.PostalCode.Equals(v.PostalCode));
pc.HaghighiCompany = haghighi;

if (_loadMode == LoadMode.InsertCompaniesData || _loadMode == LoadMode.InsertAll)
pc.IsOurCustomer = true;
}
else if (tabControl1.SelectedTab == tabHoghooghi)
{
if (string.IsNullOrEmpty(nationalCodeTextBox_Hoghoogh i.Text))
{
if (errorProvider1 != null)
{
errorProvider1.SetError(nationalCodeTextBox_Hoghoo ghi, "این فیلد باید مقدار داشته باشد");
return;
}
}
if (errorProvider1 != null)
errorProvider1.Clear();

var v = (HoghooghiCompany) hoghooghiCompanyBindingSource.Current;

//***************************
if (!v.City_Id.HasValue)
v.City_Id = Program.EsfahanCode;

hoghooghiCompanyBindingSource.EndEdit();
_context.SaveChanges();
//***************************

pc.HoghooghiCompany = v;

if (_loadMode == LoadMode.InsertCompaniesData || _loadMode == LoadMode.InsertAll)
pc.IsOurCustomer = true;

if (_loadMode == LoadMode.InsertPerson)
{
if (!string.IsNullOrEmpty(nationalCodeTextBox.Text.Tr im()))
{
var person =
_context.People.FirstOrDefault(x => x.NationalCode == nationalCodeTextBox.Text.Trim());
if (person != null)
{
pc.Person = person;
}
}
}
}

personAndComapnyBindingSource.EndEdit();

//if (!_context.PersonAndCompanies.Any(x => x.Equals(pc)))
// _context.PersonAndCompanies.Add(pc);

_context.SaveChanges();
var personId = pc.Person_Id;
var companyId = pc.HoghooghiCompany_Id;

var havePc =
_context.PersonAndCompanies.Any(
x => x.Person_Id == personId && x.HoghooghiCompany_Id == companyId);

MessageBox.Show(havePc?"عملیات با موفقیت انجام شد":"عملیات با شکست روبرو شد");
}

ashkan1234
سه شنبه 06 خرداد 1393, 19:11 عصر
دوست عزیز برای ذخیره سازی نیازی به بایندینگ و اینا نیست!
یک نمونه کوچولو براتون میزارم!
ببینید برای insert کردن همینقدر کافیه:
using (var db = new UniEntities()) {
var test = new TBL_Test
{
Name = txtName.Text,
Descriptaion = txtDescriptaion.Text,
};


db.TBL_Test.Add(test);
db.SaveChanges();
}
کدهایی که قرار دادید یکم خوندنش زمانبره!
فقط یه مورد که من قبلا باهاش توی ذخیره عکس به مشکل برخوردم نمونه گیری از کلاس EF هستش که شما بصورت Private ازش نمونه گرفتید!
این مورد قبلا برام مشکل ساز بوده!
با یک کد کوچیک اول تست کنید!
اگه حل نشد بفرمایید که اگر منزل بودم با تیم براتون چک میکنم!
موفق باشید...:لبخند:

Mahmoud.Afrad
سه شنبه 06 خرداد 1393, 19:33 عصر
توی کد آخری addnew وجود نداره!! کجا عمل افزودن انجام میشه؟

wolf_majid
چهارشنبه 07 خرداد 1393, 09:14 صبح
توی کد آخری addnew وجود نداره!! کجا عمل افزودن انجام میشه؟
عمل AddNew توی عملیات های دیگه انجام میشه (دابل کلیک بر روی دیتا گرید برای شرکت حقیقی یا حقوقی )

کد رو اصلاح کردم به صورت زیر :
private void btnSave_Click(object sender, EventArgs e)
{
if ((chkOnlyPerson.Checked || _loadMode == LoadMode.InsertPerson || _loadMode == LoadMode.InsertAll))
{
var blnSave = false;
if (!string.IsNullOrEmpty(nationalCodeTextBox.Text.Tr im()))
{
if (errorProvider1 != null)
errorProvider1.Clear();

var sex = sexComboBox.Text == "زن";
var person = (Person) personBindingSource.Current;
person.Sex = sex;
if (!_context.People.Any(x => x.NationalCode.Equals(person.NationalCode.Trim())) )
_context.People.Add(person);

personBindingSource.EndEdit();
_context.SaveChanges();
blnSave = true;
}
else
{
errorProvider1.SetError(nationalCodeTextBox, "اين فيلد الزامي است");
}
if (chkOnlyPerson.Checked)
{
if (blnSave) MessageBox.Show("شخص ذخيره شد");
return;
}
}


var pc = (PersonAndCompany) personAndComapnyBindingSource.Current;
if (pc == null)
return;

if (tabControl1.SelectedTab == tabHaghighi)
{
if (string.IsNullOrEmpty(postalCodeFieldTextBox_Haghi ghi.Text))
{
if (errorProvider1 != null)
{
errorProvider1.SetError(postalCodeFieldTextBox_Hag highi, "اين فيلد بايد مقدار داشته باشد");
return;
}
}
if (errorProvider1 != null)
errorProvider1.Clear();


var haghighi = (HaghighiCompany) haghighiCompanyBindingSource.Current;
if (!haghighi.City_Id.HasValue)
haghighi.City_Id = Program.EsfahanCode;


if (!_context.HaghighiCompanies.Any(x => x.PostalCode == haghighi.PostalCode.Trim()))
_context.HaghighiCompanies.Add(haghighi);

haghighiCompanyBindingSource.EndEdit();
_context.SaveChanges();

var company = _context.HaghighiCompanies.Single(x => x.PostalCode == haghighi.PostalCode);
pc.HaghighiCompany = haghighi;

if (_loadMode == LoadMode.InsertCompaniesData || _loadMode == LoadMode.InsertAll)
pc.IsOurCustomer = true;

if (
!_context.PersonAndCompanies.Any(
x =>
x.HaghighiOrHoghooghi.HasValue && x.HaghighiOrHoghooghi == 1 &&
x.Person_Id.Equals(nationalCodeTextBox.Text.Trim() ) && x.HaghighiCompany_Id.HasValue &&
x.HaghighiCompany_Id == company.Id)) _context.PersonAndCompanies.Add(pc);
}
else if (tabControl1.SelectedTab == tabHoghooghi)
{
if (string.IsNullOrEmpty(nationalCodeTextBox_Hoghoogh i.Text))
{
if (errorProvider1 != null)
{
errorProvider1.SetError(nationalCodeTextBox_Hoghoo ghi, "اين فيلد بايد مقدار داشته باشد");
return;
}
}
if (errorProvider1 != null)
errorProvider1.Clear();


var hoghooghi = (HoghooghiCompany) hoghooghiCompanyBindingSource.Current;
if (!hoghooghi.City_Id.HasValue)
hoghooghi.City_Id = Program.EsfahanCode;


if (!_context.HoghooghiCompanies.Any(x => x.NationalCode.Equals(hoghooghi.NationalCode)))
_context.HoghooghiCompanies.Add(hoghooghi);


hoghooghiCompanyBindingSource.EndEdit();
_context.SaveChanges();
var company = _context.HoghooghiCompanies.Single(x => x.NationalCode.Equals(hoghooghi.NationalCode));
pc.HoghooghiCompany = hoghooghi;

if (_loadMode == LoadMode.InsertCompaniesData || _loadMode == LoadMode.InsertAll)
pc.IsOurCustomer = true;

#warning چک بشه
//************************************************** *
//if (_loadMode == LoadMode.InsertPerson)
//{
// if (!string.IsNullOrEmpty(nationalCodeTextBox.Text.Tr im()))
// {
// var person =
// _context.People.FirstOrDefault(x => x.NationalCode == nationalCodeTextBox.Text.Trim());
// if (person != null)
// {
// pc.Person = person;
// }
// }
//}
//************************************************** *

if (!_context.PersonAndCompanies.Any(x =>
x.HaghighiOrHoghooghi.HasValue && x.HaghighiOrHoghooghi != 1 &&
x.HoghooghiCompany_Id.HasValue && x.HoghooghiCompany_Id == company.Id))
{
_context.PersonAndCompanies.Add(pc);
}
}

personAndComapnyBindingSource.EndEdit();
_context.SaveChanges();


MessageBox.Show("عمليات با موفقيت انجام شد");
}



توی ذخیره مشکلی نیست اما توی بروز رسانی چرا . چرا ؟ :لبخند:
دو عکس زیر رو ببینید
http://s6.uplod.ir:182/d/2k266qgc4hvhuf6trspinjlrwefn5saugt3rlayylqxaajrmlb mg4gyi/01.png
در این عکس بایندیگ سورس نشون میده رمز عبور تغییر کرده
ولی در عکس زیر بعد از EndEdit کردن و ذخیره , اطلاعات تغییر پیدا کرده از بین رفتن
http://s6.uplod.ir:182/d/2k26aqgc4hvhuf6trspih3zi7rbkk6uyyzi724yuxyo675bxhh 5xexav/02.png

ashkan1234
چهارشنبه 07 خرداد 1393, 10:02 صبح
بد نیست یکبار شرطاتونم چک کنید!
Any یک مقدار Bool برمیگردونه!
شرطهایی هم که گذاشتید توی همش Any رو با False چک میکنه!
مثلا هرچی x.HoghooghiCompany_Id == company.Id نبود،بیاد Add کنه!خوب تا اینجا درست.
خوب حالا واسه ویرایش یه شرط لازمه که بیاد چک کنه x.HoghooghiCompany_Id == company.Id دقیقا برابر هم باشن و بعد ویرایشش کنه!
الان چیو داره مقایسه میکنه؟
اصلا چیو میخوایید ویرایش کنید(کدوم فیلد رو؟)؟
قطعا اگه شرط درست باشه،_context.SaveChanges(); دیتابیس رو آپدیت میکنه!
عکسهای پیوست هم باز نمیشن!

wolf_majid
چهارشنبه 07 خرداد 1393, 10:16 صبح
ممنون از پاسختون
ولی من فقط موقعی که میخوام ذخیره کنم چک می کنم که توی بانک نباشه و بعد add کنه (که با همونم از نظر منطقی مشکل دارم چون وقتی به بایندینگ سورس میگم AddNew کن یعنی میخوام یک مورد جدید ثبت کنم)
آپدیتش هم به همین ترتیب (منطقا" وقتی من بایندینگ سورس رو EndDit میکنم یعنی تمام تغییراتم روی رمه پس ذخیره اون باید بانک رو بروز کنه )

مگر اینکه من درست بایندینگ رو متوجه نشده باشم


http://uplod.ir/boe3ejy3xocw/01.png.htm

http://uplod.ir/nbftlid0s3vl/02.png.htm

ashkan1234
چهارشنبه 07 خرداد 1393, 11:53 صبح
بطور کلی به شخصه تا حالا از بایندینگ سورس توی تکنولوژی لینک یا EF استفاده نکردم.
ولی همونطور که عرض کردم یکم شرطاتونو بهینه کنید!
به فرض مثال این x.HoghooghiCompany_Id.HasValue الان معنی نداره!وقتی این شرط x.HoghooghiCompany_Id == company.Id وجود داره!
به نظرم بجای اینکه Any استفاده کنی بهتره از FirstOrDefault استفاده کنید!چون Any (به معنی هرچی،یکم ناصحیح رفتار میکنه)،ولی FirstOrDefault دقیقا همون اولین رکورد رو که با شرطت برابر بود رو بر میگردونه!
که ما برای ویرایش اینو میخواییم!(هرچند در آخر شما همون جواب رو میگیرید ولی بهتره...)
فقط وقتی از FirstOrDefault استفاده میکنید دیگه بجای True یا False بودن،نال بودنش را چک کنید!
توی عکس شماره 02 اگه دقت کنید،مقدار فیلد NationalCode چند تا اسپیس خورده که وقتی از Equals استفاده میکنید Trim براش بگیرید!
چون از بایندینگ سورس استفاده کردید،چک کنید ببینید جایی که TaxPassword داره مقدار میگیره بدرستی بایند شده!
ولی در نهایت بازم پیشنهاده بنده اینه که از بایندینگ در Linq یا EF استفاده نکنید و همه عملیات را بصورت دستی و با کد نویسی انجام بدهید!
اینایی که عرض کردم ، تنها مواردی بود که در حال حاضر به ذهنم رسید!