2016-04-12 3 views
0

Я пробовал несколько разных вещей, и я получаю несколько разных ошибок. Я пытаюсь использовать 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; 
} 
+0

Добавлено несколько классов. – halterdev

+2

Каково определение 'UserRepository.Add()'? – devuxer

+1

Спасибо ... ты привел меня к моему ответу. – halterdev

ответ

0

для кого-то еще работает в этом вопросе, убедитесь, что вы устанавливаете состояние объекта в Added, не Modified.

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

Это решило мою проблему.

Смежные вопросы