2016-04-12 217 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; 

這解決了我的問題。