【问题标题】:Using a static table as a navigation property of a dynamic table使用静态表作为动态表的导航属性
【发布时间】:2017-01-07 12:47:47
【问题描述】:

好的,所以我在我的 asp.net 核心 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 并将测试数据播种到数据库是没有意义的。每个卡片行都需要一个 DeckID 属性,这是不切实际的,因为显然每张卡片都将用于多个卡片组,或者至少大多数卡片会使用。所以从逻辑上讲,这种方法需要一个动态卡片表,每次在卡片组中使用卡片时,我都会在其中创建一个新的现有卡片行。显然这不是正确的解决方案。我可以通过在甲板模型上使用字符串属性并附加 cardID 并以这种方式做一些魔术来使其工作,但那是草率而不是关系。我需要能够查询 Deck 模型的导航属性..

任何见解或提示将不胜感激。如果这个问题令人费解,我很抱歉,但我什至不知道根据我的经验要问什么;我对关系数据库和 asp.net 框架非常陌生。提前致谢!

编辑:编写新的数据模型类(DeckCard)用于连接表

public class DeckCard()
{
    public int ID {get; set;}
    public int DeckID {get; set;}
    public int CardID {get; set;}
}

【问题讨论】:

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


    【解决方案1】:

    您正在寻找的是一个中间表。您有 Deck 表、Card 表和 CardInDeck 表。 Deck 表有一个 DeckID,Card 表有一个 CardID,CardInDeck 表有一个 CardID 和一个 DeckID。

    这样,您可以将多张卡片链接到一副牌。

    其他人将不得不解释如何使用 EF 做到这一点,但就表格设计而言,这就是您想要的。

    【讨论】:

    • 感谢您的意见,我一定会开始在谷歌上搜索如何使用 EF 执行此操作。
    【解决方案2】:

    最简单的实现是有一个查找表。每个 Deck 都有一个 DeckCards 集合,其中有一个 DeckId 和一个 CardId。因此,不同用户的套牌可以指向同一张卡片,您不需要每个套牌都有一张新卡片,只需查找说明该套牌也可以访问该卡片。

    【讨论】:

    • 感谢您的意见,我一定会开始在谷歌上搜索如何使用 EF 执行此操作。
    • 使用查找表意味着我不需要 Deck 模型中的 Card 类型的导航属性,对吧?
    • 我想你还是想要一个导航属性。您可能希望像这样访问 Deck 的卡片: var myCard = myDeck.DeckCards.Card.Where(x => x.CardId == targetCardId).Single();或类似的东西。
    • 嘿,我为 DeckCard 编写了一个新的模型类,并为 Deck 模型添加了一个导航属性(ICollection)。对于如何填充集合属性,我仍然很迷茫。有什么办法可以从视图中发布回来吗?我正在使用 javascript 'onclick' 处理程序来单击加载到(Deck/Create)视图中的每个卡片实体,我应该在处理程序定义中编写一些 C# 代码吗?
    • 在我开始学习 Web 开发的同时,我正在重新向 OOP 介绍自己,所以请原谅我的无知。
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多