Я пробовал несколько разных вещей, и я получаю несколько разных ошибок. Я пытаюсь использовать Entity Framework и занимаюсь разработкой кода. В настоящее время я получаю сообщение об ошибкеНевозможно вставить с платформой Entity
Оператор обновления, вставки или удаления магазина влияет на неожиданное количество строк (0). Объекты могут быть изменены или удалены, поскольку объекты загружены.
Я знаю, что это невозможно, хотя я просто запускаю это локально на своей машине. Я думаю, что это имеет какое-то отношение к моему ПК, но я не уверен.
Я пробовал несколько разных вещей, но не повезло.
Вот мой код:
User.cs
- это моя модель
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string AspNetUserId { get; set; }
}
Затем в моем контроллере я пытаюсь вставить новый пользователь:
Model.Models.User.User usr = new Model.Models.User.User()
{
AspNetUserId = user.Id.ToString()
};
userService.CreateUser(usr);
userService.SaveUser();
Вот мой 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();
}
}
Я пробовал несколько разных вещей, включая удаление [Key]
с поля ID
в User.cs
, сменив на DatabaseGenerated(DatabaseGeneratedOption.None
.. еще ничего.
Моя база данных настроена правильно, а столбец ID
в моей таблице Users
- это первичный ключ и идентификатор автоинкремента. Если я просто вставляю строку в SSMS, она работает.
Любые идеи? Дайте мне знать, если вам нужно увидеть больше кода.
---- 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());
}
}
- ВТОРОЙ EDIT
Понял! Моя UserRepository.Add()
выглядит следующим образом:
public virtual void Add(T entity)
{
dbSet.Attach(entity);
dataContext.Entry(entity).State = EntityState.Modified;
}
Я изменил его, и он работал.
public virtual void Add(T entity)
{
dbSet.Attach(entity);
dataContext.Entry(entity).State = EntityState.Added;
}
Добавлено несколько классов. – halterdev
Каково определение 'UserRepository.Add()'? – devuxer
Спасибо ... ты привел меня к моему ответу. – halterdev