2017-04-07 8 views
0

Ich versuche LINQ zu verwenden, um ein Objekt in meine Datenbank einzufügen. Mein Primärschlüssel ist Autoinkrement. Muss ich die ID in meinem Code erhöhen, oder kann Entity Framework das tun?Entity Framework LINQ Einfügen

Ich habe meine DbContext:

TravelAgencyEntities db = new TravelAgencyEntities(); 

Ich versuche, ein User-Objekt einfügen:

User newUser = new User(); 
     newUser.FirstName = firstName.Text.ToString(); 
     newUser.LastName = lastName.Text.ToString(); 
     newUser.Email = email.Text.ToString(); 
     newUser.Password = password.Text.ToString(); 

     db.Users.Add(newUser); 
     db.SaveChanges(); 

Es gibt eine Ausnahme:

{"An error occurred while updating the entries. See the inner exception for details."} 

denke ich, dass Fehler weil ich die ID in meinem Objekt nicht festlege, aber es sollte automatisch erhöht werden. Kennt jemand das Problem?

Die innere ERROR:

Cannot insert explicit value for identity column in table 'User' when IDENTITY_INSERT is set to OFF 
+1

Was sagt die innere Ausnahme? – juharr

+1

Also ... was ist die 'InnerException'? –

+0

+ \t \t Innerexception \t { „Kann nicht expliziten Wert für Identitätsspalte in Tabelle‚Benutzer‘einfügen, wenn IDENTITY_INSERT auf OFF gesetzt ist.“} \t System.Exception {System.Data.SqlClient.SqlException} – user6824563

Antwort

1

Wenn Sie Code zuerst verwenden, wahrscheinlich folgenden Code in DbContext OnModelCreating gesetzt.

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Entity<User>() 
     .Property(a => a.Id) 
     .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
} 

Oder als Attribut wie

folgende
public class User 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int Id { get; set; } 

    ..... 
} 

Sie keine Identity ändern muss. Die Identitätsoption ist der Standard für den Schlüssel.

Verwandte Themen