2009-04-01 17 views
0

私は、次のデータベーススキーマを持っている:次のSQLスキーマのエンティティデータクラスを最適に設計するにはどうすればよいですか?

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

私は最初のものは、それが、第二より理解しやすくされていないと思い?

答えて

1

2つの外部キー列(ProductId & StoreId)に存在する主キーがサロゲート主キーを持たないように 'StoreProduct'表を変更すると、自分自身を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> 

だから、あなたの質問に答えるために:最初のオプションが良いです。

関連する問題