我尝试了几个不同的事情,我收到了一些不同的错误。我试图使用实体框架,并且正在做代码优先的开发。我目前收到错误无法插入实体框架
存储更新,插入或删除语句影响了意外数量的行(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