C# c实体多对多嵌套实体计数为零
我想从商户类型中获取商户,其中商户之间的关系是多对多 我得到了一个id,它是商户类型id,我想得到所有具有此id的商户类型 商户类型应具有商户类型内的商户集合 假设商户a和商户b具有id为2的商户类型gC# 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(); 上面的代码应该返回我的结果,商户
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