2013-09-06 7 views
0

У меня есть объект, который я хочу отобразить с помощью Fluent конфигурации EF Code First в:EF Code First внешнего ключа Same Таблица

class Transaction 
{ 
    int LineItemId { get; set; } 
    string TranNumber { get; set; } 
    string TaxLotId { get; set; } 
    string TradeLeg { get; set; } 

    public virtual Transaction NewDealTransaction { get; set; } 
    public virtual ICollection<GvaTransactions> RelatedTransactions { get; set; } 
} 

Редактировать Там одна таблица, которые удерживают эти данные (не соответствующие столбцы для краткости опущены).

CREATE TABLE [dbo].[Transactions] (
    [LineItemId]    INT   IDENTITY (1, 1) NOT NULL, 
    [TranNumber]    VARCHAR (20) NOT NULL, 
    [TaxLotId]     VARCHAR (20) NULL, 
    [TradeLeg]     VARCHAR (20) NULL, 
    CONSTRAINT [PK_GVATransactions] PRIMARY KEY CLUSTERED ([LineItemID] ASC) 
) 

Основной персонаж является LineItemId.

Отношение RelatedTransactions должно представлять собой факт, что все Сделки с одним и тем же TaxLotId связаны.

И, наконец, NewDealTransaction - это транзакция с такими же TaxLotId и TradeLeg == NewDeal.

Как написать свободное руководство для представления этих отношений?

ПРИМЕЧАНИЕ: Мое предпочтение здесь заключается в том, чтобы не изменять бэкэнд, поскольку это для существующего проекта таблицы, который я унаследовал, у которого уже много данных.

+0

Без структуры фактического бэкэнд, это i абсолютно невозможно вывести правильные сопоставления. –

+0

Существует один стол. Я редактировал исходный вопрос, чтобы включить определение таблицы. – Damian

ответ

1

То, о чем вы просите, не является чем-то, что связано с отношениями внешнего ключа (и, таким образом, с конструкциями/свойствами навигации Entity Framework).
Они предназначены для хранения целостности данных, а не для фильтрации данных.

Для запроса и работать с записями, которые связаны (в соответствии с определением), вы просто запрос таким образом:
Связанные записи:

var relatedRecords = context.Transactions.Where(t=>t.TaxLotId == "something"); 

Новые предложения:

var newDeals = context.Transactions.Where(t=>t.TaxLotId == "something" && t.TradeLeg == "NewDeal"); 

Чтобы это было эффективно, я рекомендовал бы составной индекс на столбцах TaxLotId и TradeLeg

+0

Я согласен с тем, что я могу просто запросить, но я бы хотел, чтобы функции 'RelatedTransactions' и' NewDealTransaction' были свойствами навигации или, в худшем случае, ленивыми. Возможно, это связано с прямым запросом? – Damian

+0

Условная загружаемая загрузка (фильтрация, сортировка и т. Д.) В настоящее время не поддерживается AFAIK. –

Смежные вопросы