我有这个聚合根
CustomerGroup
int Id
string Name
Customer[] Customers
这一个
Customer
int Id
string Name
我的模型是使用EF 4构建的。我更喜欢的是(坚持聚合根的概念)
CustomerGroup
int Id
string Name
int[] Customers
你会怎么做?
客户可能在很多人(多对多的关系)中,但我只需要单向关系 - >顾客。我没有任何需要客户的用例 - >基。
答案 0 :(得分:1)
由于您在Customer
和CustomerGroup
之间存在多对多关联,因此还有一个所谓的联结表,比如说CustomerGroupCustomer
,它有CustomerId
和CustomerGroupId
。
如果此表只有这两个字段,则EF可以隐式使用它,这意味着CustomerGroup
可以有Customers
集合,在映射中您指示CustomerGroupCustomer
是联结表。 Here就是一个例子。您可以(但不是必须)映射Customer.CustomerGroups
。在数据库优先工作时,这种隐式行为是默认行为。
但是,由于您只对CustomerId
感兴趣,因此您可以决定定期进行一对多关联CustomerGroup.CustomerGroupCustomers
。如果您解决此导航属性,则只需要一个连接,并且查询非常轻松。如果您有CustomerGroup
个实例,则可以
group.CustomerGroupCustomers.Select(c => c.CustomerId)
,只会查询CustomerId
。
如果您愿意,可以直接通过
获取Customers
group.CustomerGroupCustomers.Select(c => c.Customer)
答案 1 :(得分:0)
如果您刚创建了一个新属性,该怎么办?如果您正在使用edmx,则可以扩展partial,或者如果首先使用代码,则可以创建非映射。
public class CustomerGroup
{
public int Id { get; set; }
public string NAme { get; set; }
public Customer[] Customers { get; set; }
public int[] CustomerIds { get { return Customers.Select(c => c.Id).ToArray(); }
}