我嘗試了幾個不同的事情,我收到了一些不同的錯誤。我試圖使用實體框架,並且正在做代碼優先的開發。我目前收到錯誤無法插入實體框架
存儲更新,插入或刪除語句影響了意外數量的行(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;
}
增加了幾個類。 – halterdev
'UserRepository.Add()'的定義是什麼? – devuxer
謝謝...你讓我回答我的答案。 – halterdev