.net EntityFramework4.0-多对多关系在映射的左侧插入记录,而不仅仅是在关系表中

.net EntityFramework4.0-多对多关系在映射的左侧插入记录,而不仅仅是在关系表中,.net,entity-framework,entity-framework-4,many-to-many,.net,Entity Framework,Entity Framework 4,Many To Many,我在实体框架中与POCO有很多关系 我有一个名为Transaction的表,它有一个TransactionId列和一些其他列,这是我要插入的实体,一个名为Reason的表,它是一个目录表,有一个ReasonId和一个ReasonDescription列,我还有一个名为Transaction\u Reason的表,用于保存关系,此表有两列,分别称为ReasonId和TransactionId,它们各自的表都有foring键 在EF的Transaction配置中,构造函数中包含以下内容:

我在实体框架中与POCO有很多关系

我有一个名为Transaction的表,它有一个TransactionId列和一些其他列,这是我要插入的实体,一个名为Reason的表,它是一个目录表,有一个ReasonId和一个ReasonDescription列,我还有一个名为Transaction\u Reason的表,用于保存关系,此表有两列,分别称为ReasonId和TransactionId,它们各自的表都有foring键

在EF的Transaction配置中,构造函数中包含以下内容:

             base.HasKey(t => new { t.TransactionId }).HasMany(c => c.Reasons).WithMany(r => r.Transactions)
            .Map(t =>
            {
                t.MapRightKey("ReasonId");
                t.MapLeftKey("TransactionId");
                t.ToTable("Transaction_Reason");
            });
关系正确完成后,我会将记录插入我的Transaction_ReasonTable,但每当我检查Reasons表时,我也会在此处创建记录,而这应该只是一个目录表

这是我的插入代码:

                if (reasons != null)
                {
                    foreach (var item in reasons)
                    {
                        Reason reason = _reasonReopository.Find(item);

                        transaction.Reasons.Add(reason);

                    }
                }

                transaction = this._repository.Create(transaction);
                this._repository.Commit();
我只希望将记录插入到我的事务表中,该表是我在保存方法中创建的记录,并且插入到保存关系的事务\u原因表中,而不是插入到我的原因目录表中


有人知道如何避免这种情况吗?

原因是:您通过使用自己的上下文实例的_reasonePository.Finditem获取原因实例。此._repository.Createtransaction将事务添加到另一个上下文中,但此上下文不知道事务中实例的原因,请将它们作为新项目插入

您可以通过两种方式解决此问题:

在与事务相同的上下文中获取原因实例。 将原因实例附加到事务上下文中的原因数据库集 我更喜欢第一个选项,但因为您似乎每个实体都有存储库,所以选项2在您的情况下可能最有效。不过,我会考虑将您的存储库重构为每个集合的存储库,其中聚合是许多与逻辑相关的实体。不过,绘制集合之间的边界可能是主观的