我有這個資料庫結構
public class Gameboard
{
public string Id { get; set; }
public int Round { get; set; }
public int MaxTries { get; set; }
public ICollection<ColorGameBoard> Colors { get; set; }
public ICollection<ColorGameBoard> CorrectColors { get; set; }
}
public class Color
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<ColorGameBoard> ColorGameBoards { get; set; }
}
public class ColorGameBoard
{
public int Id { get; set; }
public int GameBoardId { get; set;}
public Gameboard Gameboard { get; set; }
public int CorrectColorId { get; set; }
public Color CorrectColors { get; set; }
public int ColorId { get; set; }
public Color Color { get; set; }
}
這就是我創建關系的方式:
modelBuilder.Entity<ColorGameBoard>()
.HasOne(x => x.Gameboard)
.WithMany(x => x.CorrectColors)
.HasForeignKey(x => x.CorrectColorId);
modelBuilder.Entity<ColorGameBoard>()
.HasOne(x => x.Gameboard)
.WithMany(x => x.Colors)
.HasForeignKey(x => x.ColorId);
modelBuilder.Entity<ColorGameBoard>()
.HasOne(x => x.Color)
.WithMany(x => x.ColorGameBoards)
.HasForeignKey(x => x.GameBoardId);
我收到此錯誤:
無法在“Gameboard.Colors”和“ColorGameBoard.Gameboard”之間創建關系,因為“Gameboard.CorrectColors”和“ColorGameBoard.Gameboard”之間已經存在關系。導航屬性只能參與單個關系。如果要覆寫現有關系,請首先在“OnModelCreating”導航“ColorGameBoard.Gameboard”上呼叫“Ignore”。
資料庫結構:在游戲板上有兩個帶顏色的串列。每個串列應至少包含 5 種顏色。并且資料庫中的每種顏色都可以用于多個游戲板上。此外,一種顏色可以在游戲板上多次使用。
任何人都知道如何修復該錯誤?
uj5u.com熱心網友回復:
您的代碼中存在一些對比關系問題。ICollection<ColorGameBoard> Gameboard 類中有兩個,但 ColorGameBoard 類中只 Gameboard包含一個。這樣,在構建資料庫時就會出現錯誤。比較關系的數量應該是一致的。當您在EF核心打造InverseProperty屬性,你可以使用一些屬性,如:virtual,ForeignKey,InverseProperty。
不知道你對資料庫的需求是什么,所以寫了兩個demo,下面是我的代碼:
第一個演示,兩個class Gameboard對應一個class Color。
游戲板類
public class Gameboard
{
public int Id { get; set; }
public int Round { get; set; }
public int MaxTries { get; set; }
[InverseProperty("GameboardOne")]
public ICollection<ColorGameBoard> OneBorad { get; set; }
[InverseProperty("GameboardTwo")]
public ICollection<ColorGameBoard> TwoBoard { get; set; }
}
顏色類
public class Color
{
public int Id { get; set; }
public string Name { get; set; }
[InverseProperty("Color")]
public ICollection<ColorGameBoard> ColorGameBoards { get; set; }
}
ColorGameBoard.class
public class ColorGameBoard
{
public int Id { get; set; }
[ForeignKey("GameboardOne")]
public int OneId { get; set; }
public virtual Gameboard GameboardOne { get; set; }
[ForeignKey("GameboardTwo")]
public int TwoId { get; set; }
public virtual Gameboard GameboardTwo { get; set; }
[ForeignKey("Color")]
public int ColorId { get; set; }
public virtual Color Color { get; set; }
}
模型構建器
modelBuilder.Entity<ColorGameBoard>()
.HasOne(c => c.Color)
.WithMany(a =>a.ColorGameBoards)
.HasForeignKey(b => b.ColorId)
.OnDelete(DeleteBehavior.NoAction);
modelBuilder.Entity<ColorGameBoard>()
.HasOne(d => d.GameboardOne)
.WithMany(e => e.OneBorad)
.HasForeignKey(b => b.OneId)
.OnDelete(DeleteBehavior.NoAction);
modelBuilder.Entity<ColorGameBoard>()
.HasOne(d => d.GameboardTwo)
.WithMany(e => e.TwoBoard)
.HasForeignKey(b => b.TwoId)
.OnDelete(DeleteBehavior.NoAction);
然后,您可以創建資料庫

第二個演示,一個class Gameboard對應兩個class Color。
游戲板類
public class Gameboard
{
public int Id { get; set; }
public int Round { get; set; }
public int MaxTries { get; set; }
[InverseProperty("Gameboard")]
public ICollection<ColorGameBoard> Colors { get; set; }
}
顏色類
public class Color
{
public int Id { get; set; }
public string Name { get; set; }
[InverseProperty("Color")]
public ICollection<ColorGameBoard> ColorGameBoards { get; set; }
[InverseProperty("CorrectColors")]
public ICollection<ColorGameBoard> CorrectColors { get; set; }
}
ColorGameBoard.class
public class ColorGameBoard
{
public int Id { get; set; }
[ForeignKey("Gameboard")]
public int GameBoardId { get; set; }
public virtual Gameboard Gameboard { get; set; }
[ForeignKey("CorrectColors")]
public int CorrectColorId { get; set; }
public virtual Color CorrectColors { get; set; }
[ForeignKey("Color")]
public int ColorId { get; set; }
public virtual Color Color { get; set; }
}
模型構建器
modelBuilder.Entity<ColorGameBoard>()
.HasOne(x => x.Gameboard)
.WithMany(x => x.Colors)
.HasForeignKey(x => x.GameBoardId)
.OnDelete(DeleteBehavior.NoAction);
modelBuilder.Entity<ColorGameBoard>()
.HasOne(x => x.CorrectColors)
.WithMany(x => x.CorrectColors)
.HasForeignKey(x => x.CorrectColorId)
.OnDelete(DeleteBehavior.NoAction);
modelBuilder.Entity<ColorGameBoard>()
.HasOne(x => x.Color)
.WithMany(x => x.ColorGameBoards)
.HasForeignKey(x => x.ColorId)
.OnDelete(DeleteBehavior.NoAction);
然后,您可以創建資料庫

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/366422.html
標籤:C# 网站 asp.net核心 实体框架核心 ef-core-2.0
