c# - 使用静态表作为动态表的导航属性

标签 c# asp.net asp.net-mvc

好吧,我在我的 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/

相关文章:

c# - 为什么 CLR 不编译溢出 const 而编译变量呢?

c# - 静态关键字、状态/实例变量和线程安全

c# - 唤醒线程以退出的最佳方法? C#

c# - 在现有的mvc中实现google登录

asp.net-mvc - .Net 中 LongPolling 的可扩展性 :Grand Finale

c# - ASP.NET MVC 5 验证 - 属性不同

c# - 使用带有 Vb.net 或 C# 的新 Bing 市场翻译器

c# - 从内存 ASP.Net 加载 PDF

asp.net - 使用客户端标签链接到应用程序根目录

mysql - 对于给定的场景,可以在 MYSQL 中使用 VARCHAR (5000) 字段吗?