Order и OrderItem. В заказе много элементов OrderItem, и один элемент OrderItem принадлежит одному заказу. Ключевыми столбцами в базе данных являются INT, но ключом в EF является столбец gui. Схема базы данных (SQL Server) довольно старая, поэтому нам придется с ней работать.
Таблица заказов: (int) id, (Guid) guid, ...
OrderItem-Table: (int) id, (Guid) guid, (int) OrderId, ...
Конфигурация для заказа:
Код: Выделить всё
oBuilder.HasKey(o => o.Guid)
oBuilder.HasMany(o => o.OrderItems).WithOne().HasPrincipalKey(o => o.Id).HasForeignKey(oi => oi.OrderId);
Код: Выделить всё
class Order
{
public int Id { get; set; }
public Guid Guid { get; set;}
public IList OrderItems { get; set; }
}
Код: Выделить всё
oiBuilder.HasKey(oi => oi.Guid)
oiBuilder.HasOne(oi => oi.Order).WithMany().HasPrincipalKey(o => o.Id).HasForeignKey(oi => oi.OrderId);
Код: Выделить всё
class OrderItem
{
public int Id { get; set; }
public Guid Guid { get; set;}
public int OrderId {get; set;}
public Order Order {get; set; }
}
'Неверное имя столбца OrderGuid'
Код: Выделить всё
becaus EF tries to Join on the key columnОн игнорирует мою конфигурацию (поскольку он должен использовать [oi.OrderId] согласно настройке). Интересно, что EF выполняет два запроса, даже если в этом нет необходимости (я использую AsSplitQuery):
Код: Выделить всё
SELECT [o.GUID],[o].[Id]
FROM [Order] AS [o]
Код: Выделить всё
SELECT [oi].[GUID], [oi].[Id], [oi].[OrderGuid], [oi].[OrderId], [o].[GUID]
FROM [Order] AS [o]
INNER JOIN [OrderItem] AS [oi] ON [o].[GUID] = [oi].[OrderGuid]
ORDER BY [oi].[Id], [o].[GUID]
Код: Выделить всё
SELECT [oi].[GUID], [oi].[Id], [oi].[OrderId], [o].[GUID]
FROM [Order] AS [o]
INNER JOIN [OrderItem] AS [oi] ON [o].[Id] = [oi].[OrderId]
ORDER BY [oi].[Id], [o].[GUID]
Что мне не хватает? Запрос работает без проблем, пока OrderItem не имеет свойства Order. Для других запросов мне нужно это свойство, чтобы я мог загружать OrderItems с условием их порядка, но по Guid, а не по идентификатору.
Подробнее здесь: https://stackoverflow.com/questions/790 ... es-not-wor
Мобильная версия