2016-04-12 15 views
0

Ich habe ein paar verschiedene Dinge ausprobiert und ich bekomme ein paar verschiedene Fehler. Ich versuche Entity Framework zu verwenden und Code-first-Entwicklung zu machen. Ich bekomme derzeit den FehlerKann nicht mit Entity Framework eingefügt werden

Store Update, Einfügen oder Löschen einer betroffenen Anzahl unerwarteter Anzahl von Zeilen (0). Entitäten wurden möglicherweise geändert oder gelöscht, seit Entitäten geladen wurden.

Ich weiß, dass dies nicht möglich ist, da ich dies nur lokal auf meiner eigenen Maschine ausführe. Ich denke, das hat etwas mit meinem PK zu tun, aber ich bin mir nicht sicher.

Ich habe ein paar verschiedene Dinge ausprobiert, aber kein Glück.

Hier ist mein Code:

User.cs - das ist mein Modell dann in meinem Controller versucht

public class User 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 
    public string AspNetUserId { get; set; } 
} 

Ich bin ein neuer Benutzer einzufügen:

Model.Models.User.User usr = new Model.Models.User.User() 
{ 
    AspNetUserId = user.Id.ToString() 
}; 
userService.CreateUser(usr); 
userService.SaveUser(); 

Hier ist mein UserService.cs:

public class UserService : IUserService 
{ 
    private readonly IUserRepository usersRepository; 
    private readonly IUnitOfWork unitOfWork; 

    public UserService(IUserRepository usersRepository, IUnitOfWork unitOfWork) 
    { 
     this.usersRepository = usersRepository; 
     this.unitOfWork = unitOfWork; 
    } 

    public IEnumerable<User> GetUsers() 
    { 
     var users = usersRepository.GetAll(); 
     return users; 
    } 

    public User GetUser(int id) 
    { 
     var user = usersRepository.GetById(id); 
     return user; 
    } 

    public User Get(string aspNetUserId) 
    { 
     Expression<Func<User, bool>> exp = c => c.AspNetUserId == aspNetUserId; 
     var user = usersRepository.Get(exp); 
     return user; 
    } 

    public void CreateUser(User user) 
    { 
     usersRepository.Add(user); 
    } 

    public void SaveUser() 
    { 
     unitOfWork.Commit(); 
    } 
} 

Ich habe ein paar verschiedene Dinge versucht, einschließlich Entfernen [Key] aus dem ID Feld in User.cs, Wechsel zu DatabaseGenerated(DatabaseGeneratedOption.None .. immer noch nichts.

Meine Datenbank ist korrekt eingerichtet und die Spalte ID in meiner Users Tabelle ist der Primärschlüssel und eine Autoinkrement-Identität. Wenn ich nur eine Zeile in SSMS einfüge, funktioniert es.

Irgendwelche Ideen? Lassen Sie es mich wissen, wenn Sie mehr Code sehen möchten.

---- EDIT

public class UnitOfWork : IUnitOfWork 
{ 
    private readonly IDbFactory dbFactory; 
    private CollegeBaseballManagerEntities dbContext; 

    public UnitOfWork(IDbFactory dbFactory) 
    { 
     this.dbFactory = dbFactory; 
    } 

    public CollegeBaseballManagerEntities DbContext 
    { 
     get 
     { 
      if (dbContext == null) 
       return dbContext = dbFactory.Init(); 
      else 
       return dbContext; 
     } 
    } 

    public void Commit() 
    { 
     DbContext.Commit(); 
    } 
} 

public class CollegeBaseballManagerEntities : DbContext 
{ 
    public CollegeBaseballManagerEntities() : base("CollegeBaseballManagerEntities") { } 

    public DbSet<League> Leagues { get; set; } 
    public DbSet<User> Users { get; set; } 

    public virtual void Commit() 
    { 
     base.SaveChanges(); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     Database.SetInitializer<CollegeBaseballManagerEntities>(null); 
     modelBuilder.Configurations.Add(new LeagueConfiguration()); 
     modelBuilder.Configurations.Add(new UserConfigurations()); 
    } 
} 

- ZWEITE EDIT

Verstanden! Mein UserRepository.Add() wie folgt aussieht:

public virtual void Add(T entity) 
{ 
    dbSet.Attach(entity); 
    dataContext.Entry(entity).State = EntityState.Modified; 
} 

habe ich es auf, und es funktionierte.

public virtual void Add(T entity) 
{ 
    dbSet.Attach(entity); 
    dataContext.Entry(entity).State = EntityState.Added; 
} 
+0

Hinzugefügt ein paar mehr Klassen. – halterdev

+2

Was ist die Definition von 'UserRepository.Add()'? – devuxer

+1

Danke ... du hast mich zu meiner Antwort geführt. – halterdev

Antwort

0

Für alle anderen in diesem Thema ausgeführt wird, stellen Sie sicher, dass Sie den Zustand der Einheit zu Added setzen, nicht Modified.

dataContext.Entry(entity).State = EntityState.Added; 

Dies löste mein Problem.

Verwandte Themen