2016-04-12 15 views
0

私はいくつかのことを試みましたが、いくつかの異なるエラーが発生しています。私はEntity Frameworkを使用しようとしており、コード初の開発を行っています。現在エラーが発生していますエンティティフレームワークで挿入できません

ストアの更新、挿入、削除のステートメントが予期しない行数(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(); 
    } 
} 

私はフィールドから[Key]を取り除いてに変更するなど、いくつかの試みを試みました。まだ何もありません。

データベースが正しく設定されており、UsersテーブルのID列が主キーと自動インクリメントIDです。 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()); 
    } 
} 

- SECONDのEDIT

はそれを手に入れました!私はそれを変更し、それが働いた

public virtual void Add(T entity) 
{ 
    dbSet.Attach(entity); 
    dataContext.Entry(entity).State = EntityState.Modified; 
} 

:私のUserRepository.Add()は次のようになります。

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; 

これが私の問題を解決しました。

関連する問題