0

次のデータベース スキーマがあります。

http://lh4.ggpht.com/_SDci0Pf3tzU/SdM3XnAmmxI/AAAAAAAAEps/Ie3xW3ZVNfQ/styleerror.png

問題は、Nhibernate でエンティティ データ クラスを作成する方法ですか?

これは良いですか:

public class Store
{
    public virtual int Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual IList<Product> Products { get; set; }
    public virtual IList<Employee> Staff { get; set; }

}

public class Employee
{
    public virtual int Id { get; private set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual Store Store { get; set; }
} 

public class Product
{
    public virtual int Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual double Price { get; set; }
    public virtual IList<Store> StoresStockedIn { get; private set; }
}

それともこちらの方がいいですか?public class Store { public virtual int Id { get; プライベートセット; } パブリック仮想文字列名 { get; 設定; }

}

public class Employee
{
    public virtual int Id { get; private set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual Store Store { get; set; }
} 

public class Product
{
    public virtual int Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual double Price { get; set; }

}

public class StoreProduct
{
   public virtual List<Product> Products{get;set;}
   public virtual List<Store> Stores{get;set;};
}

後者よりも前者の方が分かりやすいと思いますよね?

4

1 に答える 1

1

「StoreProduct」テーブルを変更して、サロゲート主キーがなく、2 つの外部キー列 (ProductId と StoreId) の主キーが存在するようにすると、次の 3 つのエンティティに制限できます: - 従業員 - 製品- 店

Store クラスは、多対多の関係として単純にマッピングできる一連の製品を持つことができます。

public class Store
{
   public int Id {get;set;}
   public string Name {get;set;}

   public ISet<Product> Products = new HashedSet<Product>();
}

Store.hbm.xml マッピングでは、次のようになります。

<set name="Products" table="StoreProducts">
   <key column="Store_Id" />
   <many-to-many class="Product" column="Product_Id" />
</set>

したがって、あなたの質問に答えるには、最初のオプションの方が優れています。

于 2009-04-01T12:21:13.907 に答える