【发布时间】:2014-07-04 11:29:58
【问题描述】:
我有以下型号:
public class Customer
{
[Key]
[ForeignKey("MainAddress")]
[Column(Order = 1)]
public string CustomerNumber { get; set; }
// .. some more standard props that aren't keys/FKs etc
[ForeignKey("MainAddress")]
[Column(Order = 2)]
public string MainAddressCode { get; set; }
[Include]
[Association("Addresses", "CustomerNumber", "CustomerNumber")]
public IList<CustomerAddress> Addresses { get; set; }
[Include]
[Association("MainAddress", "CustomerNumber,MainAddressCode", "CustomerNumber,CustomerAddressCode")]
public CustomerAddress MainAddress { get; set; }
}
public class CustomerAddress
{
public string CustomerNumber { get; set; }
public string CustomerAddressCode { get; set; }
// .. address props after this
}
我希望能够获取实体框架来检索客户的地址列表,但也可以使用 MainAddressCode 字段结合 CustomerNumber 检索主地址
目前我能得到的最接近的是生成的查询如下所示:
SELECT
1 AS [C1],
[Extent1].[CustomerNumber] AS [CustomerNumber],
[Extent1].[CustomerName] AS [CustomerName],
[Extent1].[MainAddressCode] AS [MainAddressCode],
[Extent2].[CustomerNumber] AS [CustomerNumber1],
[Extent2].[CustomerAddressCode] AS [CustomerAddressCode],
[Extent2].[Customers_CustomerNumber] AS [Customer_CustomerNumber] <--- Argh!
FROM [dbo].[Customers] AS [Extent1]
LEFT OUTER JOIN [dbo].[CustomerAddress] AS [Extent2] ON ([Extent1].[MainAddressCode] = [Extent2].[CustomerAddressCode]) AND ([Extent1].[CustomerNumber] = [Extent2].[CustomerNumber])
我认为这是因为 EF 按照惯例在 CustomerAddress 表的 FK 前面添加了 Customer 实体名称的前缀。
如何在CustomerAddress 表上指定外键的列名,以便查询正确执行?我是否需要使用 fluent API 而不是属性?
【问题讨论】:
标签: entity-framework wcf-ria-services