Отношение «многие к одному» с определенными свойствами навигации обеих сторон не работаетC#

Место общения программистов C#
Ответить
Anonymous
 Отношение «многие к одному» с определенными свойствами навигации обеих сторон не работает

Сообщение Anonymous »

У меня есть две сущности:

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; }
}
Конфигурация OrderItem:

Код: Выделить всё

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; }
}
Выполнение запроса к Order с помощью context.Orders.Include(o => o.OrderItems) вызывает это исключение:
'Неверное имя столбца OrderGuid'

Код: Выделить всё

becaus EF tries to Join on the key column
(ON [o].[GUID] = [oi].[OrderGuid])

Он игнорирует мою конфигурацию (поскольку он должен использовать [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]
Но если я удалю свойство Order из OrderItem (и конфигурацию EF), это сработает, тогда второй запрос будет выглядеть так (см. отсутствующий столбец OrderGuid):< /p>

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»