Как наилучшим образом спроектировать классы данных сущностей для следующей схемы 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; }
}

Или это лучше? открытый класс Store { public virtual int Id { get; приватный набор; } публичная виртуальная строка Name { 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 ответ

Если вы измените таблицу "StoreProduct", чтобы у нее не было суррогатного первичного ключа, а был первичный ключ, который существует из 2 столбцов внешнего ключа (ProductId & StoreId), то вы можете просто ограничить себя тремя сущностями: - Сотрудник - Продукт - Хранить

Тогда ваш класс 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>

Итак, чтобы ответить на ваш вопрос: первый вариант лучше.

Другие вопросы по тегам