Как создать определенный класс для коллекции в EF? - PullRequest
0 голосов
/ 26 августа 2011

Я хочу создать определенный класс для управления коллегой в моем приложении.

Например, у меня есть Магазин, и у меня есть список клиентов в коллекции, в этой коллекции у меня есть клиент, который является клиентом месяца, и некоторые клиенты, которые по какой-то причине получили приз, чтобы получить скидку. , Давайте перейдем к коду:

public class Store {
    public ICollection<Customer> Customers { get; set; }

    public Customer CustomerOfTheMonth 
    {
        //get and set for customer of the month
    }
    public ICollection<Customer> DiscountCustomers 
    {
        //get and set for customer of the month
    }
    public ICollection<Customer> GetAllCustomers 
    {
        //get and set for customer of the month
    }
}

Но в моей базе данных у меня только две таблицы. Магазин и Клиент.

Что я хочу сделать, так это создать определенную коллекцию для клиента, удалить логику из Магазина и поместить в определенный класс, в конце концов, я не чувствую, что логика принадлежит ни одному из этих классов.

Я хочу вот так:

public class Store {
    internal CustomerCollection Customers { get; set; }

    //get and set for the propertis, just delegating for the collection
}        

public class CustomerCollection {
    public ICollection<Customer> Customers { get; set; }

    public ICollection<Customer> DiscountCustomers 
    {
        //get and set for customer of the month
    }

    //get and set with logic to filter the collection
}

Можно ли создать это отображение и сохранить только две таблицы в базе данных? Я хочу сделать это прозрачным для приложения. Извините за проблемы с кодом, набрал в стек переполнения и не проверял синтаксис.

1 Ответ

2 голосов
/ 26 августа 2011

не нужно создавать свою бизнес-логику для классов модели.Разделите свою логику на верхний уровень.Вот твои модельные классы.Это создаст ваши отношения так, как вы хотите

public class Store {
        public vertual ICollection<Customer> Customers { get; set; }

        //get and set for other propertis
    } 



public class Customer{

    //get and set for other propertis
}

Создайте репозиторий или сервисный слой для применения определенной бизнес-логики,

 public ICollection<Customer> GetDiscountCustomers() 
    {
       return dbContext.Customers.where(c=>c.discount=true).ToList()
    }

, если вы хотите загружать магазины покупателями сразу, вы можетеиспользуйте готовую загрузку,

public ICollection<Store> GetAllStores() 
        {
           return dbContext.Stores.Include("Customers").ToList()
        }
...