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;
}
Hinzugefügt ein paar mehr Klassen. – halterdev
Was ist die Definition von 'UserRepository.Add()'? – devuxer
Danke ... du hast mich zu meiner Antwort geführt. – halterdev