Я буду использовать пример архитектуры mystore sharp lite. Вы можете скачать решение здесь:
https://github.com/codai/Sharp-Lite
Итак, речь идет о двух сущностях. Товары. И ProductCategories.
Продукция выглядит так:
public class Product : Entity
{
public Product() {
Categories = new List<ProductCategory>();
}
[DomainSignature]
[Required(ErrorMessage = "Name must be provided")]
[StringLength(255, ErrorMessage = "Name must be 255 characters or fewer")]
public virtual string Name { get; set; }
/// <summary>
/// Money is a component, not a separate entity; i.e., the Products table will have column
/// for the amount
/// </summary>
[DataType("Money")]
public virtual Money Price { get; set; }
/// <summary>
/// many-to-many between Product and ProductCategory
/// </summary>
[Display(Name="Product Categories")]
public virtual IList<ProductCategory> Categories { get; protected set; }
}
Обратите внимание, что в нем есть список категорий товаров. Так что у него есть список ProductCategories, который относится к нему.
А вот и категория продукта:
public class ProductCategory : Entity
{
public ProductCategory() {
Children = new List<ProductCategory>();
Products = new List<Product>();
}
[DomainSignature]
[Required(ErrorMessage="Name must be provided")]
[StringLength(255, ErrorMessage="Name must be 255 characters or fewer")]
public virtual string Name { get; set; }
/// <summary>
/// many-to-one from child ProductCategory to parent ProductCategory
/// </summary>
[Display(Name="Parent Category")]
public virtual ProductCategory Parent { get; set; }
/// <summary>
/// many-to-many between ProductCategory and Product
/// </summary>
public virtual IList<Product> Products { get; protected set; }
/// <summary>
/// one-to-many from parent ProductCategory to children ProductCategory
/// </summary>
public virtual IList<ProductCategory> Children { get; protected set; }
}
Я достаточно разбираюсь в запросах, поэтому я сделал простые с инструкциями where. Например, это запрос, который я использовал в другой программе для поиска имени клиента:
public static IQueryable<Customer> GetByFirstName(this IQueryable<Customer> customers, string name)
{
name = name.ToUpper();
return
customers.Where(c => c.BillingAddress.FirstName.ToUpper().Contains(name));
}
Но я пока не совсем понимаю, присоединяется. Может кто-нибудь показать мне свет?