我试图找出是什么原因造成这个错误,我列出了一些我的代码的相关领域应该有希望帮助回答我的问题。
配方实体的成员集合如下图所示:
public virtual IList<Member> Members { get; set; }
这里是在成员单位的食谱收集:
public virtual IList<Recipe> Recipes { get; set; }
为了使在一个单独的表中的许多一对多的关系,建立我的DbContext当我做下面的
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// have to specify these mappings using the EF Fluent API otherwise I end up with
// the foreign key fields being placed inside the Recipe and Member tables, which wouldn't
// give a many-to-many relationship
modelBuilder.Entity<Recipe>()
.HasMany(r => r.Members)
.WithMany(m => m.Recipes)
.Map(x => {
x.ToTable("Cookbooks"); // using a mapping table for a many-to-many relationship
x.MapLeftKey("RecipeId");
x.MapRightKey("MemberId");
});
modelBuilder.Entity<Recipe>()
.HasRequired(x => x.Author)
.WithMany()
.WillCascadeOnDelete(false);
}
我也我的种子数据库时模型的变化和所有我不得不这样做是添加到配方的成员集合,它似乎能休息整理出来给我,并把相关按键在我的食谱关系表。
这是一些在我的食谱控制器的行动,执行工作的代码:
var memberEntity = memberRepository.Find((int)memberId);
var recipeEntity = recipeRepository.Find(recipeId);
recipeEntity.Members.Add(memberEntity);
recipeRepository.InsertOrUpdate(recipeEntity);
recipeRepository.Save();
这里是我的食谱库中插入或更新方法
public void InsertOrUpdate(Recipe recipe)
{
if (recipe.Id == default(int))
{
// New entity
context.Recipes.Add(recipe);
} else
{
// Existing entity
context.Entry(recipe).State = EntityState.Modified;
}
}
我得到一个错误“出现InvalidOperationException:两个对象之间的关系不能被定义,因为它们连接到不同的ObjectContext的对象。” 在这条线:
context.Entry(recipe).State = EntityState.Modified;
没有人知道为什么会发生? 我一定要将该成员添加到配方,反之亦然,以得到这个工作? 我不知道是什么问题,因为recipeEntity似乎是正确的。
任何帮助,将不胜感激,谢谢。
编辑上下文在每个存储库中,如图(RecipeRepository&MemberRepository)被创建,所以我想这是被用于每个.Find()请求在不同的上下文中的问题? 而引起的问题?
private EatRateShareDbContext context = new EatRateShareDbContext();