1

linq 言語で 2 つのエンティティを結合する際に問題があります。

私はモデルのカテゴリを持っています:

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;}
}

関係は 1 対多であるため、1 つのカテゴリは 0...n パラメータを持つことができます。

更新: 確かに、関係は多対多です。これが、モデルに Parameter に CategoryId 属性がない理由です。

データベースを更新するためにコードを最初に使用し、移行ツールを使用しています。

データベース MSSQL Express には 3 つのテーブルがあります。カテゴリ、CategoryParameters、およびパラメータ。テーブル CategoryParameter は自動的に作成されましたが、このテーブルのモデルはありません。

複数のパラメータが正常に機能する新しいカテゴリを作成します。3 つのテーブルすべてに有効なデータが含まれています。

だから今私の問題:

1 つのカテゴリのすべてのパラメータをロードしようとしています。コマンドは次のようになります。

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 に答える