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