2016-08-11 1 views
0

Ich habe gerade angefangen, Entity Framework zu lernen, und ich versuche, Daten in die Datenbank einzufügen. Ich habe Customer Tabelle, die drei Felder ID (int), Name (varchar) und Adresse (varchar) hat. Wenn ich versuche, jedes Mal Daten in die Datenbank einzufügen, wenn die ID als 0-Wert eingefügt wird.Primärschlüssel immer Null einfügen

Meine Kunden Class-

[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; } 
} 

And My Insert Methoden-

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!!!"); 
     } 
    } 

Und ich rufe Insert-Methode wie diese

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

ich Mysql-Datenbank verwenden, bitte jemand Hilfe, danke

+0

zeigen Sie uns, wie Sie der Kundenklasse Daten zuordnen. – Takarii

+0

Geben Sie 'cust' irgendwo eine ID? Weist du ihm etwas zu? Von Ihrem Code erstellen Sie das Feld, aber es nicht tatsächlich mit einem Wert, daher die '0' Zuweisung .. –

+0

Ich weiß, in SQL-Server können Sie autoincrement für eine Spalte zuweisen. Jedes Mal, wenn ein Element mit der ID 0 eingefügt wird, wird automatisch eine neue ID vergeben. Hast du das in der MySQL-Datenbank gemacht? –

Antwort

5

Sie wahrscheinlich, dass davon aus von

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

Hinzufügen ... auf einem Grundstück, dass es weist EF an, den Wert automatisch zu füllen. Aber das ist nicht der Fall.

Es ist eigentlich anders herum. Wenn Sie eine Eigenschaft mit diesem Attribut dekorieren, teilen Sie EF mit, dass dieser Wert nicht überprüft oder berücksichtigt werden muss und dass die Datenbank dafür sorgt, dass sie mit einem automatisch inkrementierten Wert gefüllt wird.

Dies hängt jedoch davon ab, dass Sie die Datenbanktabelle korrekt definiert haben, um dieses Verhalten zu erzeugen. Es passiert nicht automatisch. Sie müssen sicherstellen, dass in Ihrer MySQL-Tabelle die Spalte korrekt als AUTO_INCREMENT definiert ist.

2

Es ist, als 0 eingegeben werden, weil Sie es nie 0.

Zum Beispiel ein Wert anders als es ist implicitly initialised Wert geben, nehmen Sie diese Methode:

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

Hier können Sie sindcust mit der ID Zuordnung zu sein an NewCustomer() übergeben. Dies könnte ein Inkrement sein, das von Ihrem DB, einer lokalen Variable oder was auch immer verwendet wird.

Von Ihrem Code aus ist es nicht offensichtlich, wenn Sie tatsächlich id einen Wert angeben, Sie drucken einfach eine nicht initialisierte Variable mit dem Standardwert 0.

bearbeiten: Wenn Sie ein MySQL autoincrement verwenden möchten, ist dies in Ihrer Datenbank erfolgt. Sie können dann eine Besetzung einen Datensatz aus der Datenbank zu einem Customer Objekt zuweisen und ein id zuweisen mit Ihrem {get; set;}