Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c实体多对多嵌套实体计数为零_C#_Entity Framework_Linq - Fatal编程技术网

C# c实体多对多嵌套实体计数为零

C# c实体多对多嵌套实体计数为零,c#,entity-framework,linq,C#,Entity Framework,Linq,我想从商户类型中获取商户,其中商户之间的关系是多对多 我得到了一个id,它是商户类型id,我想得到所有具有此id的商户类型 商户类型应具有商户类型内的商户集合 假设商户a和商户b具有id为2的商户类型g var result=db.MerchantTypes.Where(p => p.ID == id) .Include(c => c.Merchants).FirstOrDefault(); 上面的代码应该返回我的结果,商户

我想从商户类型中获取商户,其中商户之间的关系是多对多

我得到了一个id,它是商户类型id,我想得到所有具有此id的商户类型

商户类型应具有商户类型内的商户集合

假设商户a和商户b具有id为2的商户类型g

 var result=db.MerchantTypes.Where(p => p.ID == id)
                            .Include(c => c.Merchants).FirstOrDefault();
上面的代码应该返回我的结果,商户类型和内部得到了一个名单的商户

 public partial class MerchantType
        {
            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
            public MerchantType()
            {
                Merchants = new HashSet<Merchant>();
            }


            public int ID { get; set; }

            public string Type { get; set; }
            public string Description { get; set; }

            public bool IsDeleted { get; set; }
            public DateTime LastUpdatedDate { get; set; }
            public string LastUpdatedBy { get; set; }

            [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
            public virtual ICollection<Merchant> Merchants { get; set; }
        }

您必须交换键列名:

modelBuilder.Entity<Merchant>().HasMany(e => e.MerchantTypes)
            //      Left                       Right
            .WithMany(e => e.Merchants)
            .Map(m => m.ToTable("MerchantTypeMerchants")
            .MapLeftKey("Merchant_ID")          // was: MerchantType_ID
            .MapRightKey("MerchantType_ID"));   // was: Merchant_ID

是否已添加modelBuilder.Entity.Propertyx=>x.ID.HasColumnNameMerchantID;我得到了add,但与您的不同,它是modelBuilder.Entity.HasManye=>e.Merchants.WithManye=>e.Merchants.Mapm=>m.ToTableMerchants.MapLeftKeyMerchantType\u ID.MapRightKeyMerchant\u ID;我试过了,但还是无法得到商人的名单。问题中添加了来自商户类型或其他类型的字段。好吧,您仍然得到了错误的联接字段:内部联接[dbo].[Merchants]作为[Extent3].[ID]=[Extent2].[MerchantType_ID]上的[Extent3],但我使用的是var result=db.MerchantTypes.Wherep=>p.ID==ID.Includec=>c.Merchants.FirstOrDefault;当然,但是映射仍然是错误的,因此生成的SQL以相反的方式连接字段。您是否使用我的映射运行?
 modelBuilder.Entity<Merchant>()
                .HasMany(e => e.MerchantTypes)
                .WithMany(e => e.Merchants)
                .Map(m => m.ToTable("MerchantTypeMerchants")
                .MapLeftKey("MerchantType_ID")
                .MapRightKey("Merchant_ID"));
{SELECT 
    [Project1].[ID] AS [ID], 
    [Project1].[Type] AS [Type], 
    [Project1].[Description] AS [Description], 
    [Project1].[IsDeleted] AS [IsDeleted], 
    [Project1].[LastUpdatedDate] AS [LastUpdatedDate], 
    [Project1].[LastUpdatedBy] AS [LastUpdatedBy], 
    [Project1].[C1] AS [C1], 
    [Project1].[ID1] AS [ID1], 
    [Project1].[Name] AS [Name], 
    [Project1].[LogoImgPath] AS [LogoImgPath], 
    [Project1].[SliderImgPath] AS [SliderImgPath], 
    [Project1].[SliderLink] AS [SliderLink], 
    [Project1].[IsDeleted1] AS [IsDeleted1], 
    [Project1].[LastUpdatedDate1] AS [LastUpdatedDate1], 
    [Project1].[LastUpdatedBy1] AS [LastUpdatedBy1]
    FROM ( SELECT 
        [Extent1].[ID] AS [ID], 
        [Extent1].[Type] AS [Type], 
        [Extent1].[Description] AS [Description], 
        [Extent1].[IsDeleted] AS [IsDeleted], 
        [Extent1].[LastUpdatedDate] AS [LastUpdatedDate], 
        [Extent1].[LastUpdatedBy] AS [LastUpdatedBy], 
        [Join1].[ID] AS [ID1], 
        [Join1].[Name] AS [Name], 
        [Join1].[LogoImgPath] AS [LogoImgPath], 
        [Join1].[SliderImgPath] AS [SliderImgPath], 
        [Join1].[SliderLink] AS [SliderLink], 
        [Join1].[IsDeleted] AS [IsDeleted1], 
        [Join1].[LastUpdatedDate] AS [LastUpdatedDate1], 
        [Join1].[LastUpdatedBy] AS [LastUpdatedBy1], 
        CASE WHEN ([Join1].[Merchant_ID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
        FROM  [dbo].[MerchantTypes] AS [Extent1]
        LEFT OUTER JOIN  (SELECT [Extent2].[Merchant_ID] AS [Merchant_ID], [Extent3].[ID] AS [ID], [Extent3].[Name] AS [Name], [Extent3].[LogoImgPath] AS [LogoImgPath], [Extent3].[SliderImgPath] AS [SliderImgPath], [Extent3].[SliderLink] AS [SliderLink], [Extent3].[IsDeleted] AS [IsDeleted], [Extent3].[LastUpdatedDate] AS [LastUpdatedDate], [Extent3].[LastUpdatedBy] AS [LastUpdatedBy]
            FROM  [dbo].[MerchantTypeMerchants] AS [Extent2]
            INNER JOIN [dbo].[Merchants] AS [Extent3] ON [Extent3].[ID] = [Extent2].[MerchantType_ID] ) AS [Join1] ON [Extent1].[ID] = [Join1].[Merchant_ID]
        WHERE [Extent1].[ID] = @p__linq__0
    )  AS [Project1]
    ORDER BY [Project1].[ID] ASC, [Project1].[C1] ASC}
modelBuilder.Entity<Merchant>().HasMany(e => e.MerchantTypes)
            //      Left                       Right
            .WithMany(e => e.Merchants)
            .Map(m => m.ToTable("MerchantTypeMerchants")
            .MapLeftKey("Merchant_ID")          // was: MerchantType_ID
            .MapRightKey("MerchantType_ID"));   // was: Merchant_ID