2017-11-06 10 views
0

私はこのようなリポジトリプロジェクトを持っています。Entity Frameworkの更新DbContext

https://github.com/tugberkugurlu/GenericRepository/tree/master/src

私は方法があります。

public void Edit(TEntity entity) 
{ 
    _dbContext.SetAsModified(entity); 
} 


public void SetAsAdded<TEntity>(TEntity entity) where TEntity : class 
{ 
    DbEntityEntry dbEntityEntry = GetDbEntityEntrySafely(entity); 
    dbEntityEntry.State = EntityState.Added; 
} 

しかし、私は更新記録中に取得しています。私はこのエラーを時々起こしています。同じタイプの 別のエンティティがすでに同じ主キー 値を有するのでタイプのエンティティを取り付け

「はTP.Model」に失敗しました。これは、 'Attach'メソッドを使用するか、または グラフ内のエンティティのいずれかが競合するキー値を持つ場合、エンティティの 状態を 'Unchanged'または 'Modified'に設定すると発生します。これは、一部のエンティティ が新しく、データベース生成キー値をまだ受け取っていないことが原因です。 このケースでは、 'Add'メソッドまたは 'Added'エンティティ状態を使用して、グラフを と追跡し、非新規エンティティの状態を 'Unchanged'または 'Modified'に設定します。

+0

あなたがこれを確認しましたか? https://stackoverflow.com/questions/23201907/asp-net-mvc-attaching-anentity-of-type-modelname-failed-because-otherotherent –

+0

私は何度も何度も読んでいますが、わかりません問題があります。 – caras

+0

コンテキストdbset 'Local'コレクションをデバッグしてください。既にIDを持つエンティティが含まれていると、コードが失敗する可能性があります。しかし、コードを十分に示していないので、問題の内容を確認することはできません。 – grek40

答えて

0

私はこのような問題を解決しました。私は最初の列をチェックした。その後、私はこのようなことをしました。

_dbSet = dbContext.DbSet<TEntity>(); 

残りはケーキです。

_dbSet.Attach(entity); 
       DbEntityEntry entry = _dbContext.Entry(entity); 
       foreach (var proprty in entry.OriginalValues.PropertyNames) 
       { 
        var Current = entry.CurrentValues.GetValue<object>(proprty); 
        var New = entry.GetDatabaseValues().GetValue<object>(proprty); 

        if (Current != null) 
        { 
         if (!object.Equals(New, Current)) 
         { 
          entry.Property(proprty).IsModified = true; 
         } 
        } 
       } 
関連する問題