2016-04-12 239 views
0

我尝试了几个不同的事情,我收到了一些不同的错误。我试图使用实体框架,并且正在做代码优先的开发。我目前收到错误无法插入实体框架

存储更新,插入或删除语句影响了意外数量的行(0)。自实体加载后,实体可能已被修改或删除。

我知道这是不可能的,因为我只是在我自己的机器上本地运行。我认为这与我的PK有关,但我不确定。

我已经尝试了几个不同的东西,但没有运气。

这里是我的代码:

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(); 
    } 
} 

我尝试了几个不同的东西,包括从ID字段中删除[Key]User.cs,更改为DatabaseGenerated(DatabaseGeneratedOption.None ..仍然没有。

我的数据库设置正确,我的Users表中的ID列是主键和自动增量标识。如果我只是在SSMS中插入一行,它就可以工作。

任何想法?如果您需要查看更多代码,请告知我们。

----编辑

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()); 
    } 
} 

- 第二个编辑

明白了!我的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; 

这解决了我的问题。