0

私は現在4つのテーブルを持っています。

製品、カテゴリ、サブカテゴリ、製品サブカテゴリ。

カテゴリには、OneToMany SubCategory 関係があります

Product には、Category との OneToOne 関係と、SubCategory との ZeroToMany 関係があります。

したがって、テーブルは次のようになります

製品表

  Id     Name    CategoryId
-----------------------------
  1      P1      1
  2      P2      2    

カテゴリー表

  Id     Name
-----------------    
  1      Food    
  2      Travel  

サブカテゴリ テーブル

  Id     Name     CategoryId   
------------------------------
  1      Italian  1
  2      Thai     1

ProductSubCategory テーブル

  Id     ProductId     SubCategoryId     Other
-------------------------------------------------------   
  1      1             1                 NULL
  2      1             2                 NULL
  3      1             NULL              Other Sub Cat

現在、Product と SubCategory が OneToMany の関係にある別のクラスに ProductSubCategory があります。

製品クラス

public class Product
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Category Category { get; set; }
    public virtual ICollection<ProductSubCategory> SubCategories { get; set; }

    ...
}

サブカテゴリ クラス

public class SubCategory
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Category Category { get; set; }
    public virtual ICollection<ProductSubCategory> Products { get; set; }

    ...
}

ProductSubCategory クラス

public class ProductSubCategory
{
    public virtual Product Product { get; set; }
    public virtual SubCategory SubCategory { get; set; }
    public virtual string Other { get; set; }

    ...
}

この方法でアクセスしたいと思います: サブカテゴリ名または「その他」の名前を返す「Product.SubCategories[x].Name」

現在、名前を取得するには「Product.SubCategories[x].SubCategory.Name」と入力し、「その他」の名前を取得するには「Product.SubCategories[x].Other」と入力する必要があります

これのより良い方法はありますか?

ありがとう!

編集:タイプミスを修正

4

1 に答える 1

0

ProductSubCategoryタイプを減らしたい場合は、投影されたプロパティを追加するだけです:-)

public virtual string Name
{
    get { return SubCategory.Name; }
}
于 2012-07-02T12:58:01.883 に答える