C# 我是否在MVC中构建了错误的实体?

C# 我是否在MVC中构建了错误的实体?,c#,asp.net-mvc,entity-framework,linq-to-sql,ef-code-first,C#,Asp.net Mvc,Entity Framework,Linq To Sql,Ef Code First,进球。我有一个“礼物”实体,它描述了某人所能提供的东西(保姆、遛狗等),并给出了评级。我想要一个“礼物分类”实体,它提供一般类别的描述性信息(宠物、运动、汽车等),以便有人搜索apon,然后获得所有具有这些类别的礼物。“礼物”实体可以有多个与之关联的“礼物类别”实体。我希望能够搜索一个类别,并拉出所有与这些类别相关联的“礼物”实体。这里是我到目前为止所做的,但它似乎不适用于实体优先的方法。也许我需要另一个表来连接这两个实体,因为目前这两个表的连接方式似乎不正确 礼品实体: public clas

进球。我有一个“礼物”实体,它描述了某人所能提供的东西(保姆、遛狗等),并给出了评级。我想要一个“礼物分类”实体,它提供一般类别的描述性信息(宠物、运动、汽车等),以便有人搜索apon,然后获得所有具有这些类别的礼物。“礼物”实体可以有多个与之关联的“礼物类别”实体。我希望能够搜索一个类别,并拉出所有与这些类别相关联的“礼物”实体。这里是我到目前为止所做的,但它似乎不适用于实体优先的方法。也许我需要另一个表来连接这两个实体,因为目前这两个表的连接方式似乎不正确

礼品实体:

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; }
}
创建的“GiftCategory”表将创建一个礼品id列,该列将“GiftCategory”链接回礼品(不是我想要的)

看起来我需要创建一个连接两个实体的实体?比如:

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

这样,我可以为一件礼物设置多个类别,但我不明白的是,首先是实体,我真的不需要这个实体,我只需要这个表来获取/查询ID的“GiftCategory”实体,然后获取礼物ID以获取所有礼物。那么,创建这个实体似乎有些过分了?有没有一种方法可以在不创建第三个表/实体(“ConnectGifts”)的情况下首先使用代码完成此操作?还是我不明白所有的实体都是表,所有的表都是实体?我还使用linq to sql进行所有查询。

您正在寻找一种
多对多关系,可以定义为:

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; }
}
公共类礼品
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共ICollection Categories{get;set;}//这是否不正确???
公共整数评级{get;set;}
}
公共类礼物分类
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共i收集礼品{get;set;}
}

所以每个都有一个集合<代码>礼物
有许多
类别
类别
有许多
礼物
。您可以像使用
ConnectGifts
一样使用
bridge
表,但EF不需要这样做。只需使用
Gift
GiftCategory
,EF实际上会为您创建桥接表。

但我不想将GiftCategories与任何礼物关联起来!如果我用一系列礼物创建一个礼物类别,那么它不会将礼物类别与特定的礼物联系起来吗?类别只是类别。我不确定那是我想要的。我不希望礼物类别与任何特定的礼物挂钩,但我确实希望礼物与礼物类别挂钩,我不认为!!EF创建了带有ID的桥接表,但是如果没有包含桥接数据的实体,我如何使用linq to sql查询给定类别的所有礼物呢?您不必担心。EF为您处理所有这些。如果你想要宠物类的每一件礼物,你可以做
var gifts=giftDbSet.Where(m=>m.category.Name==“pet”).ToList()
。EF将为您处理所有桥牌事务。m=>m.Category.Name来自哪里?M来自礼品类别还是礼品?它是
LINQ
。Where方法允许我传入
lambda
。在谷歌搜索这些术语。他们与英孚携手共进。但要回答你的具体问题:在我的例子中,m是礼物。where方法将遍历
giftDbSet
中的每个礼物,并返回满足lambda中指定条件的每个项目。实际上它并没有归还物品。它实际上只是构建了一个查询,只有在我调用ToList时,查询才会执行。
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; }
}