Linq到实体框架m2m查询与简单的字符串约束

本文关键字:简单 字符串 约束 查询 实体 框架 m2m Linq | 更新日期: 2023-09-27 18:05:46

尝试在MVC3项目中学习Linq to EF…
实体框架中的多对多关系:

<>之前衬衫衬衫类型类型----------- ------------- ---------ShirtIDShirtIDTypeIDShirtName TypeID TypeNameShirtPrice之前

ShirtType映射表中没有其他字段,所以现在我在两个实体Shirt.TypeType.Shirt中都有导航属性。
在从数据库生成实体之前,我在ShirtType中创建了复杂的PK,包括两个外键。
我已经用值填充了数据库。
以下是我用来查询数据库的代码,以便返回与类型Type.Name==tName

引用的衬衫<>之前public ActionResult Browse(string tName){使用(TShopEntities db=new TShopEntities()){var typeModel = from s in db。衬衫从t到swhere t.TypeName == tNameselect new tsStore.ModelView.ShirtView(){ShirtName =。ShirtName,ShirtPrice =。ShirtPrice};返回视图(typeModel.ToList ());}} 之前

我的linq查询没有返回任何东西,视图只打印标题。我被困在这里一段时间了,是linq查询错误还是我应该寻找其他错误?

Linq到实体框架m2m查询与简单的字符串约束

假设这是您想要的查询:

返回类型type引用的衬衫。Name = = tName

假设你的EF模型和数据库是正确的(很难说,因为我看不到你的EDMX或FK的截图)。

你应该有2个实体在你的EDMX -衬衫和类型。连接表将被隐藏,因为EF足够聪明,可以在后台执行隐式连接。

那么这个查询应该可以工作:

var shirtsOfAParticularType = db.Shirts.Where(shirt => shirt.Types.Any(type => type.TypeName == "someTypeName")).ToList();

记住,既然有很多…一件衬衫可以有很多种款式。因此,上面的查询将返回具有至少一种您指定的类型的衬衫。

这是你想要的吗?

当您将所有三个实体加载到edmx中时,实体框架创建了两个实体,而不是三个:

A. Shirt - with scalar properties of ShirtID, ShirtName and ShirtPrice.   
           with navigation property to many Types (IEnumerable<Type>).   
B. Type - with scalar properties of TypeID and TypeName.   
          with navigation property to many Shirts (IEnumerable<Shirt>).  

然后,在创建实体代码之后,您可以这样做:

public ActionResult Browse(string tName)
        {
            using (TShopEntities db=new TShopEntities())
            {
                var typeModel = from s in db.Type
                                select Shirts;
                return View(typeModel.ToList());
            }
        }

就这些。不要为ShirtType创建另一个实体,因为这不是创建模型的正确方法。