私はEFコードファーストとASP.NET MVCを使用してWebアプリケーションを構築しています。私はUnitOfWorkのを持っていなかった、まずEntity Frameworkコード、作業単位、リポジトリおよび共有DbContext
public interface IUnitOfWork
{
void Save();
}
public class CleanStreets : DbContext, IUnitOfWork
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<Point> Points { get; set; }
public DbSet<Rating> Ratings { get; set; }
public DbSet<Picture> Pictures { get; set; }
public DbSet<Problem> Problems { get; set; }
public DbSet<Comment> Comments { get; set; }
public DbSet<Category> Categories { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(u => u.Comments)
.WithRequired(c => c.User)
.HasForeignKey(c => c.UserID)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
public void Save()
{
this.SaveChanges();
}
}
public class EFProblemRepository : IProblemRepository
{
private readonly CleanStreets data;
public EFProblemRepository(CleanStreets data)
{
this.data = data;
}
public void Save(Problem problem)
{
if (problem.ProblemID == 0)
{
data.Problems.Add(problem);
}
data.Save();
}
...
}
:
IProblemRepository
EFProblemRepository
ICategoryRepository
EFCategoryRepository
CleanStreets // db context
IUnitOfWork
// etc.
コードスニペット:私は、次の種類があります。私はすべてのリポジトリに新しいコンテキストを作成しました。しかし、私はProblem
を保存したかった後(Problem
がCategory
を含みます)、上記のSaveメソッドを使用して、私は次のエラーを受け取った:
An entity object cannot be referenced by multiple instances of IEntityChangeTracker
私はこの問題は私のデシベルコンテキストとであることを、stackoverflowの上、見つかりましたソリューションは、作業パターンのユニットと共有されたコンテキストを作成することでした。私はそれをやろうとしましたが(上記のように)、私はまだエラーが発生します。 Problem
を保存するたびにエラーが表示されます。私は "共有" dbコンテキストを実装しましたか?
あなたのリポジトリはCleanStreetsに依存していますか?それをコンストラクタ経由で渡していますか? – BZink
Problemエンティティはどのように作成されますか?あなたの質問には、使用している操作に関する情報がありません。この場合のマッピングはまったく役に立たない情報です。 –