2017-05-25 19 views
1

誰かがこのケースで私を助けることができる場合、私は思っていた:私は、データベースへの私の変更を保存しようとしているので、私は、コンテキストを使用して、私はここに私のエンティティクラスからオブジェクトである_tblcustomerを持っているが、私のコードは次のとおりです。Entity Frameworkを使用してデータベースに変更を保存するにはどうすればよいですか?

private void BtnSaveCustomer_Click(object sender, EventArgs e) 
{ 
    if (CustomerMode == (int)CustomerModeOperaton.insert) 
    { 
     if (!string.IsNullOrWhiteSpace(TxtCustomerName.Text) || 
      !string.IsNullOrWhiteSpace(TxtLastName.Text) || 
      !string.IsNullOrWhiteSpace(TxtCustomerCode.Text)) 
     { 
      tblCustomer Customer = new tblCustomer(); 

      Customer.CustomerName = TxtCustomerName.Text.ToString(); 
      Customer.CustomerCode = Convert.ToInt32(TxtCustomerCode.Text); 

      if (!string.IsNullOrWhiteSpace(TxtCustomerAdress.Text)) 
      { 
       Customer.CustomerAdresse = TxtCustomerAdress.Text.ToString(); 
      } 
      else 
      { 
       Customer.CustomerAdresse = null; 
      } 

      if (!string.IsNullOrWhiteSpace(TxtCustomerPhone.Text)) 
      { 
       Customer.CustomerPhone = Convert.ToInt32(TxtCustomerPhone.Text); 
      } 
      else 
      { 
       Customer.CustomerPhone = null; 
      } 

      if (!string.IsNullOrWhiteSpace(TxtCustomerCellphone.Text)) 
      { 
       Customer.CustomerCellPhone = Convert.ToInt32(TxtCustomerCellphone.Text); 
      } 
      else 
      { 
       Customer.CustomerCellPhone = null; 
      } 

      Customer.CustomerLastName = TxtLastName.Text.ToString(); 
      Customer.CustomerID = Guid.NewGuid(); 
      Customer.rowguid = Guid.NewGuid(); 

      using (var Context = new FactorEntities()) 
      { 
       Context.tblCustomers.Add(Customer); 
       Context.SaveChanges(); 
      } 

      MessageBox.Show("اطلاعات مشتری در سیستم ثبت شد"); 
      // status=1; 
     } 
     else 
     { 
      MessageBox.Show("نام مشتری و نام خانوادگی و کد مشتری باید پر شوند"); 
     } 
    } 
    else 
    { 
     using (var context = new FactorEntities()) 
     { 
      var CustomerDetaile = context.tblCustomers.Find(CustomerID); 

      _tblCustomer = new tblCustomer(); 
      _tblCustomer.CustomerID = CustomerDetaile.CustomerID; 
      _tblCustomer.CustomerName = TxtCustomerName.Text; 
      _tblCustomer.CustomerLastName = TxtLastName.Text; 
      _tblCustomer.CustomerCode = Convert.ToInt32(TxtCustomerCode.Text); 
      _tblCustomer.CustomerAdresse = TxtCustomerAdress.Text; 

      context.SaveChanges(); 
     } 

     MessageBox.Show("اطلاعات در سیستم ثبت شد"); 
    } 
} 

主な部分はここにある:事前に

using (var context =new FactorEntities()) 
{ 
    var CustomerDetaile = context.tblCustomers.Find(CustomerID); 
    _tblCustomer = new tblCustomer(); 
    _tblCustomer.CustomerID = CustomerDetaile.CustomerID; 
    _tblCustomer.CustomerName = TxtCustomerName.Text; 
    _tblCustomer.CustomerLastName = TxtLastName.Text; 
    _tblCustomer.CustomerCode = Convert.ToInt32(TxtCustomerCode.Text); 
    _tblCustomer.CustomerAdresse = TxtCustomerAdress.Text; 

    context.SaveChanges(); 
} 

が、それはまだ保存していない理由を私は知らない...

感謝。

+0

'context.SaveChanges();'いや、それを行う必要がありますか? – jdmdevdotnet

+0

@jdmdevdotnetはい先生..しかし、それは –

+0

動作しませんどのような「それが動作しないの?」動作しない線量'context.SaveChanges'が動作します。どのようなエラーメッセージですか? – jdmdevdotnet

答えて

4

私はあなたが出て行くオブジェクトを変更する代わり場合は、代わりに

を書くべきあなたの「主要部分」のようなもので、文脈に

context.tblCustomers.Add(_tblCustomer); 

を_tblCustomerオブジェクトを追加どこにも表示されません

CustomerDetaile.CustomerId = "the new id" 

そして今、それが保存されます。あなたが今何をしている

、新しい顧客を作成し、その値を代入し、それを何もしていません。

var obj = context.TableName.New(); 
    obj.Name = "BLA"; 
    obj.Salary = 32; 
    context.TableName.Add(obj); 
    context.SaveChanges(); 

をテーブル内の既存のオブジェクトを編集するには:あなたが使用する必要があり、この場合、データベースに新しいオブジェクトを保存するには

+0

私はこのコードを使用すべきではないので...私はこの顧客をデータベースに持っているので、なぜそれをもう一度追加しなければならないのですか?私はこのエラーに直面するだろう:オブジェクト 'dbo.tblCustomers'に重複キーを挿入することはできません –

+0

この場合、データベースから取ったエンティティを変更し、新しいものを作成しないでください(自分の回答を編集しました) –

0

var obj = context.TableName.Find(id); 
obj.Name = "BLA"; 
obj.Salary = 32; 
context.Entry(obj).State = EntryState.Modified; 
context.SaveChanges(); 

それはいつも私のために働い=)これを適用しますあなたのコードに概念があり、それはうまくいくかもしれません。

+0

Entrystateを取得しなかった、私のコードでEntrystateは何ですか? –

+0

あなたの中には存在しません。あなたが既存のオブジェクトで何かを変更したいのであれば、それを入力しなければなりません。 – Ssheverdin

+0

例、 var obj = context.TableName.Find(id); obj.Name = "BLA"; obj.Salary = 32; context.Entry(obj).State = EntryState.Modified; context.SaveChanges(); – Ssheverdin

0

私は新しいが...私は私の選択のためのコードを記述する必要は行うべきではありません...私は@ChristianKouaméここに助けることによってそれを得た私のコ​​ードです:

using (var context =new FactorEntities()) 
       { 
        var CustomerDetaile= context.tblCustomers.Find(CustomerID); 
        CustomerDetaile.CustomerID = CustomerID; 
        if (!string.IsNullOrWhiteSpace(TxtCustomerName.Text)) 
        { 
         CustomerDetaile.CustomerName = TxtCustomerName.Text; 

        } 


        CustomerDetaile.CustomerLastName = TxtLastName.Text; 
        CustomerDetaile.CustomerAdresse = TxtCustomerAdress.Text; 
        CustomerDetaile.CustomerCellPhone = Convert.ToInt32(TxtCustomerCellphone.Text); 
        CustomerDetaile.CustomerCode = Convert.ToInt32(TxtCustomerCode.Text); 
        context.SaveChanges(); 
       } 

おかげでたくさん。

関連する問題