2016-08-11 6 views
0

ちょうどEntity Frameworkを学習し始めました。データをデータベースに挿入しようとしています。 id(int)、name(varchar)、およびaddress(varchar)の3つのフィールドを持つCustomerテーブルがあります。 IDが0の値として挿入されるたびにデータベースにデータを挿入しようとしています。プライマリキー常にゼロを挿入する

マイカスタマークラス -

[Table("customer")] 
public class Customer 
{ 
    [Key] 
    [Column("custId")] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int custId { get; set; } 
    public string name { get; set; } 
    public string address { get; set; } 
} 

そして私の挿入Methods-

static void insertCustomer(Customer cust) 
    { 
     using(var context = new DBEntities()) 
     { 
      Console.WriteLine("ID: " + cust.custId); 
      context.customer.Add(cust); 
      context.SaveChanges(); 
      Console.WriteLine("Customer Inserted Successfully!!!"); 
     } 
    } 

そして、私は誰かを喜ば、私はMySQLデータベースを使用しています。この

Customer cust = new Customer(); 
cust.custId = 106; 
cust.name = "Prince"; 
cust.address = "Kolkata"; 
insertCustomer(cust); 

のようにInsertメソッドを呼び出していますヘルプ、感謝

+0

お客様のクラスにデータをどのように割り当てるかを示します。 – Takarii

+0

あなたはどこにでもIDを持つ 'cust'を提供していますか?あなたはそれに何かを割り当てていますか?あなたのコードからは、フィールドを作成していますが、実際に値を与えていないので、 '0'の割り当てになります。 –

+0

SQLサーバーでは、列にautoincrementを割り当てることができます。アイテムがid 0で挿入されるたびに、新しいidが自動的に与えられます。あなたはMySQLデータベースでそれをしましたか? –

答えて

5

を使用してidを割り当てることができます値を自動的に入力するようにEFに指示します。しかし、そうではありません。

実際には逆です。その属性を持つプロパティをデコレートすることによって、EFに対して、その値を検証したり心配する必要はなく、データベースは自動的にインクリメントする値を設定して処理することをEFに伝えます。

ただし、これは、データベーステーブルを正しく定義してその動作を生成することに依存しています。自動的には発生しません。あなたはあなたのMySQLテーブルが正確にAUTO_INCREMENTとして定義された列を持っていることを確認する必要があります。

2

あなたがそれをそれが例えば0

implicitly initialised値だとは異なる値を与えることがないので、この方法を取る0として入力されています:

ここ
public void NewCustomer(string _name, int _id) 
{ 
    Customer cust = new Customer(); 
    cust.name = _name; 
    cust.id = _id; 
    InsertCustomer(cust); 
} 

あなたはIDのビーイングでcustを割り当てますNewCustomer()に渡されます。これは、あなたのDB、ローカル変数などから使用される増分です。

idに実際に値を与えているかどうかはわかりません。初期化されていない変数を単に出力するのは、デフォルトの0です。

編集:もしあなたがMySQL autoincrementを使用したいのであれば、これはあなたのデータベース内で行われます。その後、あなたはおそらくそれという、性質上...

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

を追加することであることを想定しているデータベースからCustomerオブジェクトにキャストにレコードを割り当て、あなたの{get; set;}

関連する問題