Выполнение запроса соединения В ASP.NET MVC 3 с использованием архитектуры Sharp Lite - PullRequest
1 голос
/ 09 февраля 2012

Я буду использовать пример архитектуры 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));
    }

Но я пока не совсем понимаю, присоединяется. Может кто-нибудь показать мне свет?

1 Ответ

1 голос
/ 08 марта 2012

Прежде всего, если вы не понимаете, как сделать соединение, вам, вероятно, следует проконсультироваться с некоторыми документами по нему, но имейте в виду, что это имеет очень мало (если вообще ничего) общего с Sharp Lite.

Основная идея репозиториев Sharp Lite состоит в том, чтобы использовать возможности IQueryable, чтобы меньше зависеть от базового доступа к данным (NH или EF, которые являются наиболее популярными), поэтому вы должны в основном узнать, как работают объединения NH (если вы используете NH) и начните работать с этим. Кроме того, попробуйте создать лучший пример с более сложной структурой, чтобы вы могли действительно выполнять некоторые объединения.

Если вам нужен Jumpstart для SharpLite, обязательно прочитайте пост о том, почему существует Sharp lite , а другой, объясняющий, как он построен . Кроме того, я сам создал , чтобы люди начали с демо-проекта.

Надеюсь, я смогу помочь!

...