[英]EF Core: Map Many to Many relationship without navigation property
我正在嘗試使用 Fluent API 在實體框架核心中創建多對多關系 這是我的第一個 model:
MyCalculationSelector.cs
public int SortOrder { get; set; }
public string UserString { get { return Name; } }
private IList<CalculationType> _calculationTypes;
public virtual IList<CalculationType> CalculationTypes
{
get { return _calculationTypes; }
set { _calculationTypes = value; }
}
這是我的第二個 model:
MyCalculationType.cs
public int SortOrder { get; set; }
public string UserString
{
get { return Name; }
}
public int CalculationMethod { get; set; }
我記得 EF 6 可以輕松地從 Fluent API 建立多對多關系:
modelBuilder.Entity<MyCalculationSelector>().HasMany(x => x.MyCalculationTypes).WithMany();
我們可以在 ef core 中實現這樣的事情嗎? 截至今天,Hasmany-Withmany 實現是不可能的
您可以使用私有字段或屬性來表示:
modelBuilder.Entity<MyCalculationSelector>()
.HasMany(x => x.MyCalculationTypes)
.WithMany("NameOfThePrivateFieldOnMyCalculationType");
這樣導航屬性不會公開,但您仍然可以在MyCalculationSelector
上使用導航屬性,而無需遍歷中間連接表。
我已遵循文檔並提出了這個答案,拜托,比我了解更多的人,如果我錯了,會糾正我。
我首先創建了我的連接表:
CalculationSelectorCalculationType.cs
public class CalculationSelectorCalculationType
{
public int CalculationSelector_Id { get; set; }
public CalculationSelector CalculationSelector { get; set; }
public int CalculationType_Id { get; set; }
public CalculationType CalculationType { get; set; }
}
CalculationSelector.cs
public CalculationSelector()
{
_calculationTypes = new List<CalculationSelectorCalculationType>();
FontSize = 30;
}
public int SortOrder { get; set; }
public string UserString { get { return Name; } }
private IList<CalculationSelectorCalculationType> _calculationTypes;
public virtual IList<CalculationSelectorCalculationType> CalculationTypes
{
get { return _calculationTypes; }
set { _calculationTypes = value; }
}
CalculationType.cs
public int SortOrder { get; set; }
public string UserString
{
get { return Name; }
}
public int CalculationMethod { get; set; }
...最后是我的 DbContext:
modelBuilder.Entity<CalculationSelectorCalculationType>().HasKey(p => new { p.CalculationSelector_Id, p.CalculationType_Id });
modelBuilder.Entity<CalculationSelectorCalculationType>().HasOne(p => p.CalculationSelector).WithMany(x => x.CalculationTypes).HasForeignKey(p => p.CalculationSelector_Id);
modelBuilder.Entity<CalculationSelectorCalculationType>().HasOne(p => p.CalculationType).WithMany().HasForeignKey(p => p.CalculationType_Id);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.