Как наилучшим образом спроектировать классы данных сущностей для следующей схемы SQL? - PullRequest
0 голосов
/ 01 апреля 2009

У меня есть следующая схема базы данных:

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 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 Ответ

1 голос
/ 01 апреля 2009

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

Ваш класс Магазина может иметь набор продуктов, который можно просто сопоставить как отношение «многие ко многим».

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>

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

...