[英]Entity Framework - Code First - Allowing Multiple Entities to reference a single entity
我一直在嘗試使用EF Code First為我正在處理的項目創建和管理我的數據庫。 但是,我遇到了一個小問題。
public class Planet
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public string Planet_Name { get; set; }
[Required]
public int Planet_X { get; set; }
[Required]
public int Planet_Y { get; set; }
[Required]
public string Planet_Desc { get; set; }
public virtual ICollection<Mineral> Minerals { get; set;}
}
public partial class Mineral
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Symbol { get; set; }
[Required]
public string Mineral_Desc { get; set; }
[Required]
public int rate { get; set; }
[Required]
public decimal ratio { get; set; }
}
使用上述內容時,Mineral表獲取Planet_Id列集作為ForeignKey。 當然,當2個行星具有相同的礦物質時,這會產生導致錯誤的副作用。 我需要的是允許多個行星共享礦物。 雖然星球需要知道它有什么礦物質,但礦物質沒有理由知道它是什么行星。
因此,我的問題是,我該如何做呢? (注意:我試圖將一個公共虛擬星球添加到Mineral類中,它什么都沒改變。)
你需要在Mineral
類中添加一個ICollection<Planet> Planets
:
public class Mineral
{
public Mineral()
{
Planets = new HashSet<Planet>();
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Symbol { get; set; }
[Required]
public string Mineral_Desc { get; set; }
[Required]
public int rate { get; set; }
[Required]
public decimal ratio { get; set; }
public virtual ICollection<Planet> Planets { get; set; }
}
同樣在Planet
類中,您應該添加一個默認構造函數:
public class Planet
{
public Planet()
{
Minerals = new HashSet<Mineral>();
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public string Planet_Name { get; set; }
[Required]
public int Planet_X { get; set; }
[Required]
public int Planet_Y { get; set; }
[Required]
public string Planet_Desc { get; set; }
public virtual ICollection<Mineral> Minerals { get; set; }
}
所以在你的DbContext中,你需要定義實體Planet
和Mineral
並通過覆蓋OnModelCreating
函數來創建多對多的關系:
public class PlanetContext : DbContext
{
public DbSet<Planet> Peoples { get; set; }
public DbSet<Mineral> Minerals { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Planet>()
.HasMany(p => p.Minerals)
.WithMany(m => m.Planets)
.Map(t => t.MapLeftKey("PlanetID")
.MapRightKey("MineralID")
.ToTable("PlanetMineral"));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.