C# 切换到HasMany()并获取序列不包含匹配元素错误

C# 切换到HasMany()并获取序列不包含匹配元素错误,c#,.net,entity-framework,linq,ef-code-first,C#,.net,Entity Framework,Linq,Ef Code First,我在一个项目中,实体使用一个额外的类来映射它们之间的关系,例如: public class MainEnt { public int Id { get; set; } public string Description { get; set; } public ICollection<MainEntAnotherEnt> AnotherEnts{get;set;} } public class AnotherEnt { public int I

我在一个项目中,实体使用一个额外的类来映射它们之间的关系,例如:

public class MainEnt 
{
    public int Id { get; set; }
    public string Description { get; set; }

    public ICollection<MainEntAnotherEnt> AnotherEnts{get;set;}
}

public class AnotherEnt 
{
    public int Id { get; set; }
    public string Description { get; set; }
}

public class MainEntAnotherEnt
{
    public int Id { get; set; }
    public int MainEntId{ get; set; }
    public int AnotherEntId{ get; set; }
}
我想改变这种方法,这样我们就摆脱了MaintentNotheren类,我们可以使用映射来实现它,所以我做了以下更改:

public class MainEnt 
{
    public int Id { get; set; }
    public string Description { get; set; }

    public virtual ICollection<AnotherEnt> AnotherEnts{get;set;}
}

public class AnotherEnt 
{
    public int Id { get; set; }
    public string Description { get; set; }

    public virtual ICollection<MainEnt> MainEnt {get;set;}
}


   modelBuilder.Entity<MainEnt >()
            .HasMany(m => m.AnotherEnts)
            .WithMany(a => a.MainEnt)
            .Map(ma =>
            {
                ma.MapLeftKey("MainEntId");
                ma.MapRightKey("AnotherEntId");
                ma.ToTable("MainEntAnotherEnt");
            });
公共类维护
{
公共int Id{get;set;}
公共字符串说明{get;set;}
公共虚拟ICollection另一个元素{get;set;}
}
公共类
{
公共int Id{get;set;}
公共字符串说明{get;set;}
公共虚拟ICollection维护{get;set;}
}
modelBuilder.Entity()
.HasMany(m=>m.AnotherEnts)
.WithMany(a=>a.MainEnt)
.Map(ma=>
{
ma.MapLeftKey(“MainEntId”);
ma.MapRightKey(“AnotherEntId”);
ma.ToTable(“MaintentNotheren”);
});
但我得到了一个错误:

[InvalidOperationException:序列不包含匹配元素] System.Linq.Enumerable.Single(IEnumerable`1源,Func`2谓词)+472
System.Data.Entity.Migrations.Infrastructure.d_u70.MoveNext()+471
System.Linq.d_u22`3.MoveNext()+355
System.Linq.d_u63`1.MoveNext()+79
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)+504
System.Linq.Enumerable.ToList(IEnumerable`1源)+70

System.Data.Entity.Migrations.Infrastructure.EdmModelDifference.FindAssociationTypePairs(ICollection`1 entityTypePairs)+862
System.Data.Entity.Migrations.Infrastructure.EdmModelDifference.Diff(ModelMetadata源,ModelMetadata目标,Lazy`1 modificationCommandTreeGenerator,MigrationSqlGenerator MigrationSqlGenerator,String sourceModelVersion,String targetModelVersion)+222
System.Data.Entity.Migrations.Infrastructure.EdmModelDifferent.Diff(XDocument sourceModel,XDocument targetModel,Lazy`1 modificationCommandTreeGenerator,MigrationSqlGenerator MigrationSqlGenerator,String sourceModelVersion,String targetModelVersion)+588
System.Data.Entity.Migrations.DbMigrator.isModelOutdate(XDocument model,DbMigration lastMigration)+72
System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations,String targetMigrationId,String lastMigrationId)+342
System.Data.Entity.Migrations.DbMigrator.UpdateInternal(字符串targetMigration)+609
System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(操作必须成功访问数据库)+609
System.Data.Entity.Migrations.DbMigrator.Update(字符串targetMigration)+116
System.Data.Entity.Migratedatabase到最新版本`2.InitializeDatabase(TContext上下文)+156
系统.数据.实体.内部.内部上下文.性能化操作(操作操作)+71
System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()+482
System.Data.Entity.Internal.RetryAction`1.性能(TInput输入)+174
System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 Action)+273
System.Data.Entity.Database.Initialize(布尔力)+80


任何关于如何修复此问题的指导都将非常感谢

通常情况下,对于没有链接实体的多对多实现,链接表仅由两个设置为复合PK的FK组成。在这种情况下,您的.map语句是正确的。尝试更改MaintEntAnotherEnt表定义以删除现有PK,并将2 FK设置为复合PK。通常,只有在关联中需要其他字段时,才需要加入实体。(通常是审计字段)我编辑了我的问题并添加了链接表是如何在一次迁移中创建的,我将主键更改为合成的
。PrimaryKey(t=>new{t.DemoMaterialId,t.audenceid})
我认为发布的问题与使用链接表创建表的事实有关,现在它是使用映射创建的,因为我不太熟悉自动迁移的工作原理,我不知道是否应该添加另一个迁移来删除表?我已经尝试运行add migration命令,但是我得到了相同的错误。
public class MainEnt 
{
    public int Id { get; set; }
    public string Description { get; set; }

    public virtual ICollection<AnotherEnt> AnotherEnts{get;set;}
}

public class AnotherEnt 
{
    public int Id { get; set; }
    public string Description { get; set; }

    public virtual ICollection<MainEnt> MainEnt {get;set;}
}


   modelBuilder.Entity<MainEnt >()
            .HasMany(m => m.AnotherEnts)
            .WithMany(a => a.MainEnt)
            .Map(ma =>
            {
                ma.MapLeftKey("MainEntId");
                ma.MapRightKey("AnotherEntId");
                ma.ToTable("MainEntAnotherEnt");
            });