1

我在通过 linq 语言加入两个实体时遇到问题。

我有模型类别:

public class Category : DbContext
{
  [Key, Column(Order = 0),DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  public int CategoryId { get; set; }

  Key, Column(Order = 1)]
  public int ShopId { get; set; }

  public string Name {get;set;} 

  public virtual ICollection<Parameter> Parameter { get; set; }
}

和模型参数

public class Parameter : DbContext
{
    [Key, Column(Order = 0),DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ParamId { get; set;}

    [Key, Column(Order = 1)]
    public int ShopId { get; set;}

    public string Name {get; set;}
    public string Value {get;set;}
}

这种关系是一对多的,所以一个类别可以有 0...n 个参数。

更新: 当然,这种关系是多对多的。这就是为什么 Parameter 在模型中没有 CategoryId 属性的原因。

我首先使用代码和迁移工具来更新数据库;

在数据库 MSSQL Express 中有 3 个表。类别、类别参数和参数。表 CategoryParameter 是自动创建的,我没有此表的模型。

创建具有多个参数的新类别工作正常。所有 3 个表都包含有效数据。

所以我现在的问题:

我正在尝试加载一个类别的所有参数。该命令如下所示:

var parameters = from c in db.Categories
                join p in db.Parameters
                on new { ??? , c.ShopId } equals new { ??? , p.ShopId } 
                where c.ShopId == userProfile.ShopId && c.CategoryId == id
                select new { ParamId = p.ParamId, Name = p.Name };

所以我的问题是,如果类中没有可用的属性,如何加入这些表。

非常感谢您的帮助!

4

1 回答 1

1

您不需要JOIN: 改用导航属性:

  1. 找到类别实体。
  2. 使用Parameter类别实体的属性。
var parameters = db.Categories.First(x => x.CategoryId == 10).Parameter.ToList();
于 2013-08-11T22:04:43.823 回答