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