我在MVC中构建了错误的实体吗?

时间:2014-05-29 15:49:57

标签: c# asp.net-mvc entity-framework linq-to-sql ef-code-first

目标。我有一个"礼物"描述某人提供(保姆,狗步行等)评级的实体。我想要一个" GiftCategory"提供一般类别描述性信息(宠物,运动,汽车等)的实体,供某人搜索apon,然后获得具有这些类别的所有礼物。 A"礼物"实体可以有多个" GiftCategory"与之相关的实体。我希望有能力搜索一个类别并拔出所有" Gift"使用与之关联的类别创建的实体。这是我到目前为止所做的,但它似乎并没有与实体第一种方法一起使用。也许我需要另一个连接两个实体的表,因为目前这两个表的连接方式似乎不正确吗?

礼品实体:

public class Gift
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<GiftCategory> Categories { get; set; } // is this incorrect???
    public int Rating { get; set; }
}

类别实体:

public class GiftCategory
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

&#34; GiftCategory&#34;创建的表创建一个gift_id列,用于链接&#34; GiftCategory&#34;回到礼物(不是我想要的)!!!!

似乎我需要创建一个连接两个实体的实体?类似的东西:

public class ConnectGifts
{
    public int Id { get; set; }
    public string GiftId{ get; set; }
    public string GiftCategoryID{ get; set; }
}

这样我可以为礼物设置多个类别,但我不理解的是实体首先我真的不需要这个实体我只需要这个表来获取/查询&#34; GiftCategory&#34;然后,ids的实体获得礼物ID以获得所有礼物。所以创建这个实体似乎有点矫枉过正?有没有办法在没有创建第三个表/实体(&#34; ConnectGifts&#34;)的情况下首先使用代码?或者我不明白所有实体都是表,所有表都是实体?我也使用linq-to-sql进行所有查询。

1 个答案:

答案 0 :(得分:1)

您正在寻找many-to-many关系,可以定义为:

public class Gift  
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<GiftCategory> Categories { get; set; } // is this incorrect???
    public int Rating { get; set; }
}

public class GiftCategory
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Gift> Gifts { get; set; }
}

所以每个人都有另一个的集合。 Gift有许多CategoriesCategory有很多Gifts。你可以像bridge一样使用ConnectGifts表,但EF不需要它。仅使用GiftGiftCategory,EF实际上会为您创建桥接表。