是否有人知道如何在EF Core中查詢數據庫中的多對多關係,但更像是從一側進行左外連接?無法查詢多對多關係
讓我解釋一下我的意思。
Currency.cs
public class Currency
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UID { get; set; } = Guid.NewGuid();
public string ISOCode { get; set; }
public string Symbol { get; set; }
[JsonIgnore]
public List<RegionCurrency> RegionCurrencies { get; set; }
}
RegionCurrency.cs
public class RegionCurrency
{
public Guid CurrencyUID { get; set; }
public Guid RegionUID { get; set; }
[ForeignKey("CurrencyUID")]
public Currency Currency { get; set; }
[ForeignKey("RegionUID")]
public Region Region { get; set; }
}
Region.cs
public class Region
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UID { get; set; } = Guid.NewGuid();
[StringLength(8)]
public string CountryISOCode { get; set; }
public List<RegionCurrency> RegionCurrencies { get; set; }
}
MyContext.cs
public class LookupTablesContext : DbContext
{
public virtual DbSet<Currency> Currecies { get; set; }
public virtual DbSet<RegionCurrency> RegionCurrency { get; set; }
public virtual DbSet<Region> Regions { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasDefaultSchema(SchemaName);
modelBuilder.Entity<RegionCurrency>()
.HasKey(t => new { t.CurrencyUID, t.RegionUID })
.HasName("PK_RegionCurrency");
modelBuilder.Entity<RegionCurrency>()
.HasOne(pt => pt.Region)
.WithMany(p => p.RegionCurrencies)
.HasForeignKey(pt => pt.RegionUID);
modelBuilder.Entity<RegionCurrency>()
.HasOne(pt => pt.Currency)
.WithMany(p => p.RegionCurrencies)
.HasForeignKey(pt => pt.CurrencyUID);
modelBuilder.Entity<Currency>()
.HasIndex(c => c.ISOCode)
.HasName("UX_Currency_ISOCode")
.IsUnique();
modelBuilder.Entity<Region>()
.HasIndex(c => c.CountryISOCode)
.HasName("UX_Region_CountryISOCode")
.IsUnique();
}
}
我的查詢:
var result = ctx.Currencies
.Include(c => c.RegionCurrencies)
.ThenInclude(rc => rc.Select(rcs => rcs.Regions)) // This seems to be wrong
.SingleOrDefault(c => c.ISOCode == "EUR");
我還試圖用包括你可以看到下面的圖片:
請注意,RegionCurrencies表可以包含0-N的關係,我即使在RegionCurrency表中沒有記錄,也希望獲得貨幣實體。
這(以及類似的嘗試)結束了在例外是這樣的:
類型「System.ArgumentException」的異常出現在Microsoft.EntityFrameworkCore.dll但在用戶代碼中沒有處理
更多信息:屬性表達式'rc => {來自RegionCurrency rc in rcs select [pts] .Regions}'無效。表達式應該表示一個屬性訪問:'t => t.MyProperty'。有關包括相關數據的更多信息,請參閱http://go.microsoft.com/fwlink/?LinkID=746393。
Dependencies:
"Microsoft.EntityFrameworkCore": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
我找不到任何工作示例。但當然,我只是失明。
感謝您的任何幫助。
對不起,但這不起作用。 我認爲,Include(t => t.PostTags)將返回IIncludableQueriable>,因此ThenInclude將不會有p.Post屬性,但只有List方法,因爲列表類型將從第一個輸出包括。 –
Tomino
我看不到任何問題there.please看到我的更新。 – Sampath
比你更新你的答案。請參閱我更新的問題(圖片)。這是一個真實項目的截圖,其中關係的定義與示例項目中的相同。 – Tomino