【问题标题】:Creating collection of class that isn't table with entity framework使用实体框架创建不是表的类的集合
【发布时间】:2013-05-30 00:13:08
【问题描述】:

有什么方法可以创建不是表格的对象集合吗? 我的意思是-

class Deck
{
     [Key]
     public int DeckId { get; set; }


     [Required]
     public ICollection<Card> Cards { get; set; }       
}

如果我有一张牌桌就可以了,但如果我没有一张牌桌会怎样?

【问题讨论】:

  • 你为什么要这样做?这会违反您的关注点分离。如果您需要 Deck 有卡片,请使用 DTO 或视图模型,因为数据关注点对卡片不感兴趣。
  • 因为我正在创建一个纸牌游戏,而且由于每张卡只有一个,所以我不能复制任何卡。我必须检查新卡是否已经在使用中,所以我想创建一个正在使用的卡的集合。你有更好的主意吗? @Maess

标签: c# sql-server entity-framework poco


【解决方案1】:

是的,你可以。在代码中,您首先使用NotMappedAttribute 标记条目。根据您的配置,应该可以将其放入部分类中。

这是一个示例,它将一组映射的相关数据过滤为相同数据的特定未映射子集。

using System.ComponentModel.DataAnnotations.Schema;

[NotMapped]
public ICollection<Cards> RemainingCards
{
    get
    {
        return AllCards.Where(s => s.SomeCiteria == true).ToList();
    }
}

【讨论】:

  • 所以我必须为卡片创建一个表,然后根据我的条件从 Deck 类中获取它?
  • @Videron 不,这只是一个例子。如果你愿意,你可以硬编码一组 52 张卡片......重要的部分是 NotMappedAttribute
  • 但我仍然需要将它保存在数据库中。我的问题是,如果我将所有卡片都保存在桌子上,我将不得不每次都检查这样的事情 - return AllCards.Any(s =&gt; s.DeckId == Id &amp;&amp; s.CardValue == Value); 它会检查很多行,所以我想通过将其保存在列表或数组中来最小化它。跨度>
  • @Videron 问题标题说没有桌子:-/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 2018-12-06
  • 2013-01-30
  • 2013-06-18
相关资源
最近更新 更多