Hi,
I get the error "Sequence contains more than one element" when joining the same 2 entities twice and using MapToStoredProcedures(). See the code below. If you remove the MapToStoredProcedure() calls in the configuration classes, then the code runs.
```
public class TableOne
{
public int TableOneId { get; set; }
public virtual TableTwo TableTwo_1 { get; set; }
public virtual TableTwo TableTwo_2 { get; set; }
}
public class TableTwo
{
public int TableTwoId { get; set; }
}
public class TableOneMap : EntityTypeConfiguration<TableOne>
{
public TableOneMap()
{
// Primary Key
HasKey(t => t.TableOneId);
// Relationships
HasRequired(t => t.TableTwo_1)
.WithMany()
.Map(d => d.MapKey("TableTwoId_1"))
.WillCascadeOnDelete(false);
HasRequired(t => t.TableTwo_2)
.WithMany()
.Map(d => d.MapKey("TableTwoId_2"))
.WillCascadeOnDelete(false);
MapToStoredProcedures();
}
}
public class TableTwoMap : EntityTypeConfiguration<TableTwo>
{
public TableTwoMap()
{
// Primary Key
HasKey(t => t.TableTwoId);
MapToStoredProcedures();
}
}
public class EFTestContextSeedIntialiser : DropCreateDatabaseAlways<EFTestContext>
{
protected override void Seed(EFTestContext context)
{
var table2_1 = new TableTwo();
var table2_2 = new TableTwo();
var table1 = new TableOne()
{
TableTwo_1 = table2_1,
TableTwo_2 = table2_2
};
context.Set<TableOne>().Add(table1);
context.SaveChanges();
}
}
public class EFTestContext : DbContext
{
public EFTestContext()
: base("Name=EFTestContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new TableOneMap());
modelBuilder.Configurations.Add(new TableTwoMap());
}
}
class Program
{
static void Main(string[] args)
{
Database.SetInitializer(new EFTestContextSeedIntialiser());
var context = new EFTestContext();
context.Database.Initialize(true);
System.Console.WriteLine("First Join: " + context.Set<TableOne>().First().TableTwo_1.TableTwoId);
System.Console.WriteLine("Second Join: " + context.Set<TableOne>().First().TableTwo_2.TableTwoId);
System.Console.ReadLine();
}
}
```
A first chance exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll
System.Transactions Critical: 0 : http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/UnhandledUnhandled exceptionConsole.vshost.exeSystem.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089Sequence contains more than one element at System.Linq.Enumerable.SingleOrDefaultTSource
at System.Data.Entity.Migrations.Infrastructure.ModificationCommandTreeGenerator.ChangeRelationshipStates(DbContext context, EntityType entityType, Object entity, EntityState state)
at System.Data.Entity.Migrations.Infrastructure.ModificationCommandTreeGenerator.<Generate>d__14.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Linq.Enumerable.&lt;CastIterator&gt;d__b11.MoveNext()
at System.Linq.Buffer1..ctor(IEnumerable1 source)
at System.Linq.Enumerable.ToArrayTSource
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.GenerateFunctionBodyTCommandTree
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.GenerateUpdateFunctionBody(EntityTypeModificationFunctionMapping modificationFunctionMapping, Lazy1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator) at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.&lt;BuildCreateProcedureOperations&gt;d__15f.MoveNext() at System.Linq.Enumerable.&lt;SelectManyIterator&gt;d__313.MoveNext()
at System.Linq.Enumerable.<ConcatIterator>d__711.MoveNext() at System.Collections.Generic.List1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(ModelMetadata source, ModelMetadata target, Lazy1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion) at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel, XDocument targetModel, Lazy1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion)
at System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(IEnumerable1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update()
at System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func3 createMigrator, ObjectContext objectContext) at System.Data.Entity.Internal.InternalContext.CreateDatabase(ObjectContext objectContext, DatabaseExistenceState existenceState) at System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) at System.Data.Entity.DropCreateDatabaseAlways1.InitializeDatabase(TContext context)
at System.Data.Entity.Internal.InternalContext.<>c__DisplayClassf1.&lt;CreateInitializationAction&gt;b__e() at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() at System.Data.Entity.Database.Initialize(Boolean force) at Console.Program.Main(String[] args) in c:\Users\ajohnc\Documents\Visual Studio 2013\Projects\EFPowerToolsTest\Console\Program.cs:line 91 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()</StackTrace><ExceptionString>System.InvalidOperationException: Sequence contains more than one element at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable1 source)
at System.Data.Entity.Migrations.Infrastructure.ModificationCommandTreeGenerator.ChangeRelationshipStates(DbContext context, EntityType entityType, Object entity, EntityState state)
at System.Data.Entity.Migrations.Infrastructure.ModificationCommandTreeGenerator.<Generate>d__14.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Linq.Enumerable.&lt;CastIterator&gt;d__b11.MoveNext()
at System.Linq.Buffer1..ctor(IEnumerable1 source)
at System.Linq.Enumerable.ToArrayTSource
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.GenerateFunctionBodyTCommandTree
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.GenerateUpdateFunctionBody(EntityTypeModificationFunctionMapping modificationFunctionMapping, Lazy1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator) at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.&lt;BuildCreateProcedureOperations&gt;d__15f.MoveNext() at System.Linq.Enumerable.&lt;SelectManyIterator&gt;d__313.MoveNext()
at System.Linq.Enumerable.<ConcatIterator>d__711.MoveNext() at System.Collections.Generic.List1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source)
at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(ModelMetadata source, ModelMetadata target, Lazy1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion) at System.Data.Entity.Migrations.Infrastructure.EdmModelDiffer.Diff(XDocument sourceModel, XDocument targetModel, Lazy1 modificationCommandTreeGenerator, MigrationSqlGenerator migrationSqlGenerator, String sourceModelVersion, String targetModelVersion)
at System.Data.Entity.Migrations.DbMigrator.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.AutoMigrate(String migrationId, VersionedModel sourceModel, VersionedModel targetModel, Boolean downgrading)
at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgra