如何在EF中为集合创建特定类?

时间:2011-08-26 02:52:46

标签: entity-framework c#-4.0

我想创建一个特定的类来管理我的应用程序中的同事。

例如,我有一个商店,我有一个集合中的客户列表,在这个集合中我有一个客户是本月的客户,有些客户因某些原因获得折扣以获得折扣。我们来看看代码:

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
    }
}

但在我的数据库中,我只有两张桌子。商店和客户。

我想要做的是为客户创建一个特定的集合,从Store中删除逻辑并放入一个特定的类,毕竟,我不认为逻辑属于这两个类。< / p>

我愿意这样:

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 个答案:

答案 0 :(得分:2)

不需要为模型类创建业务逻辑。将您的逻辑分离到上一级。这是你的模型类。它会根据您的需要创建您的关系

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()
        }