0

asp.net c# と Mysql を使用したオンライン ショッピングのプロジェクトに取り組んでいます。Devart Linqconnect (LinqtoMysql) を使用しています。mysql の顧客と顧客の住所に 2 つのテーブルがあります。

顧客テーブル
CustomerID Int
Customerhone varchar(20);
顧客パスワード Varchar(20);
電子メール varchar(20)名
char(50)
姓(50)
ユーザー名 varshar(50)

Customer_Addresses
Customer_address_ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
Customer_ID INT NOT NULL,
address1 CHAR(250),
address2 CHAR(250),
city CHAR(20),
state CHAR(20), pincode VARCHAR(20),
PRIMARY KEY(Customer_address_ID),
FOREIGNキー (Customer_ID) REFERENCES 顧客 (Customer_ID)

LINQ to mysql を使用して顧客の登録時にこのコードを記述すると、次のようになります。

 using (ShoppingDataContext data = new ShoppingDataContext())
        {
            Customer NewCustomer = new Customer();
            CustomerAddress newaddress = new CustomerAddress();
            newaddress.CustomerID = NewCustomer.CustomerID;
            NewCustomer.CustomerFirstname = TextBoxFirstName.Text;
            NewCustomer.CustomerLastname = TextBoxLastname.Text;
            NewCustomer.CustomerEmail = TextBoxEmail.Text;
            NewCustomer.Username = TextBoxusername.Text;
            NewCustomer.CustomerPassword = TextBoxPassword.Text;
            newaddress.Address1 = TextBoxAddress1.Text;
            newaddress.Address2 = TextBoxAddress2.Text;
            newaddress.City = TextBoxCity.Text;
            newaddress.State = TextBoxState.Text;
            newaddress.Pincode = TextBoxPincode.Text;
            System.Web.Security.Membership.CreateUser(TextBoxusername.Text, TextBoxPassword.Text);
            data.Customers.InsertOnSubmit(NewCustomer);
            PanelRegister.Visible = false;
            ConfimPanel.Visible = true;

        }

このコードは、データを 2 つのテーブルに挿入するために機能しますか。助けてください。customer_address テーブルは、外部キーである customerId に従って、入力された顧客アドレスが顧客テーブルのものであることを検出できますか..

もう1つ、ajaxツールキットのモーダルポップアップパネルを使用し、パネルに登録およびログインテーブルを追加しています..

私の登録パネル: ここに画像の説明を入力

前もって感謝します...

4

3 に答える 3

1

自分のコードの行を見ると、

data.Customers.InsertOnSubmit(NewCustomer);

InsertOnSubmitこれは、とInsertAllOnSubmitが単一のテーブルで呼び出されるというストーリーを示しています。私はこれを自分で試したことはありませんが、回避して独自の方法でこれを行うことができます。

Pablo Lemurrが述べたように、外部キーを参照するため、最初にCustomerレコードを追加し、次にAddressレコードを追加する必要があります。

お役に立てれば。

于 2013-03-16T18:02:45.577 に答える
1

次のようにコードを整理することを強くお勧めします。

 using (ShoppingDataContext data = new ShoppingDataContext())
 {
     Customer newCustomer = new Customer()
     {
         CustomerFirstname = TextBoxFirstName.Text,
         CustomerLastname = TextBoxLastname.Text,
         CustomerEmail = TextBoxEmail.Text,
         Username = TextBoxusername.Text,
         CustomerPassword = TextBoxPassword.Text
     };

     //now I'd like to be proven wrong here, but I believe you need to insert
     //and submit at this point
     data.Customers.InsertOnSubmit(newCustomer);
     data.SubmitChanges();

     CustomerAddress newaddress = new CustomerAddress()
     {
          CustomerID = NewCustomer.CustomerID,
          Address1 = TextBoxAddress1.Text,
          Address2 = TextBoxAddress2.Text,
          City = TextBoxCity.Text,
          State = TextBoxState.Text,
          Pincode = TextBoxPincode.Text,
     };
     //add new address to your customer and save
     newCustomer.CustomerAddresses.Add(newAddress);
     //it has been a while since I used linq2sql so you may need one of these:
     //newCustomer.CustomerAddresses.InsertOnSubmit(newAddress);
     //newCustomer.CustomerAddresses.Attach(newAddress);
     //basically use intellisense to help you figure out the right one, you might
     //have some trial and error here
     data.SubmitChanges();

     System.Web.Security.Membership.CreateUser(TextBoxusername.Text, TextBoxPassword.Text);

     PanelRegister.Visible = false;
     ConfimPanel.Visible = true;

  }

また、insertとdb.SubmitChanges()が移動された場所にも注意してください。これを1回のSubmitChanges()で一度に実行できるかどうか、または示されているように2つ必要かどうかはわかりません。私はあなたがそれについての最新情報を与えることに興味があります。

ここで簡単な挿入例を見ることができます:

http://msdn.microsoft.com/en-us/library/bb386941.aspx

編集:これをすべてトランザクションスコープでラップして、ユニットとして成功または失敗するようにすることができます

using(TransactionScope scope = new TransactionScope())
{
  using(ShoppingDataContext data = new ShoppingDataContext())
  {
    //the rest of your code
  }
}

ちょっとした考え。

于 2013-03-16T18:17:03.043 に答える
1

データベースエンジンが外部キーを見つけられるようにするために、Customer Table最初にレコードを挿入し、次ににレコードを挿入する必要があるようですCustomer_Addresses

于 2013-03-16T17:54:59.110 に答える