好吧,我在我的 asp.net core mvc 应用程序中遇到了这种前所未有的情况。对于上下文,我的应用程序是纸牌游戏的套牌构建/共享网站(类似于 hearthpwn 或 icyveins)。我有一张“卡片”表,在新卡片发布到游戏中之前它将保持不变。我还有一个表“Deck”,它将存储用户牌组并需要与 Card 表的关系。我从 asp.net 网站教程学习 mvc,并希望继续使用 entityframeworkcore 进行我所有的数据库交互。所以,我的 Deck 类看起来像这样:
public class Deck
{
public int ID { get; set; }
public string Name { get; set; }
public string Class { get; set; }
public virtual ICollection<DeckCard> DeckCards { get; set; }
}
我希望 Cards 成为 Deck 的导航属性。我不知道如何使用教程中提供的方法来完成这项工作。
数字 1:使用 dbinitializer 并将测试数据播种到数据库在使用静态表时毫无意义。每个 Card 行都需要一个 DeckID 属性,这是不切实际的,因为显然每张卡片都将用于多个套牌中,或者至少其中大部分会。所以从逻辑上讲,这种方法需要一个动态卡片表,每次在卡片组中使用一张卡片时,我都会在其中创建一个新的现有卡片行。显然这不是正确的解决方案。我可以通过在甲板模型上使用字符串属性并附加 cardID 并以这种方式做一些魔术来使其工作,但那是草率的而不是关系的。我需要能够查询 Deck 模型的导航属性..
如有任何见解或提示,我们将不胜感激。如果这个问题很复杂,我很抱歉,但根据我的经验,我什至不知道该问什么;我对关系数据库和 asp.net 框架很陌生。提前致谢!
编辑:编写新的数据模型类 (DeckCard) 以用于连接表
public class DeckCard()
{
public int ID {get; set;}
public int DeckID {get; set;}
public int CardID {get; set;}
}
最佳答案
您正在寻找的是中间表。您有 Deck 表、Card 表和 CardInDeck 表。 Deck 表有一个 DeckID,Card 表有一个 CardID,CardInDeck 表有一个 CardID 和一个 DeckID。
这样,您可以将多张卡片链接到一个卡片组。
其他人将不得不解释如何使用 EF 做到这一点,但就表设计而言,这就是您想要的。
关于c# - 使用静态表作为动态表的导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41472496/